Every field is optional and a field left out keeps its value. Reference,
EndDate, InvoiceTemplateId, InvoiceEmailTemplateId and
BrandingThemeId clear with null; ContactIds: [] removes every
auto-approve contact. StatusId 3 archives the contract and 1 restores it.
ClientId can’t change. Once an invoice has been generated from the contract,
StartDate and RepeatPeriodId are refused with 409.
ServiceLines replaces the set, matched by Id: an entry with an Id updates
that line, one without adds a line, and a line left out is removed, which is refused with 409
while it has time logged that hasn’t been invoiced. Each line’s LineItems replaces its
set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line
Balance and the thresholds can change; the template and price can’t.
Returns the contract in the GET /v1/contracts/{contractId} shape.
Your Gorelo API key. See Generate API key. If your data is hosted in Australia, click the base URL at the top of this page and select https://api.aue.gorelo.io.
Partial update of a contract. Every field is optional and a field left out keeps its value; a
clearable field clears with null. ServiceLines, and each line's LineItems,
replace their set, matched by Id.
Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated
from the contract. Line items keep their own dates. Not clearable.
The service lines, replacing the set: an entry with an Id updates that line, one without adds
a line, and a line left out is removed. Leave the field out to keep the lines as they are.
Everything about one contract: the client and locations it covers, its billing schedule, and
each service line with the actual products/labor billed on it.
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Gorelo Documentation","colors":{"primary":"#1DAF94","light":"#8AEFDD","dark":"#1DAF94"},"logo":{"light":"https://mintcdn.com/gorelo/J8h_fLstMj_tYUTJ/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=J8h_fLstMj_tYUTJ\u0026q=85\u0026s=3c12ffa7afbcef131d2c6fb36f00e159","dark":"https://mintcdn.com/gorelo/J8h_fLstMj_tYUTJ/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=J8h_fLstMj_tYUTJ\u0026q=85\u0026s=2dc592c604dd68bb156e97c047088df2"},"favicon":"https://mintcdn.com/gorelo/eK-NlDv-DeG3Jk2m/favicon.svg?fit=max\u0026auto=format\u0026n=eK-NlDv-DeG3Jk2m\u0026q=85\u0026s=99510712391acd38a7057cf358869244","api":{"url":"full"},"appearance":{"default":"dark"},"background":{"color":{"light":"#FBFBFB","dark":"#1F2023"}},"navbar":{"links":[{"href":"https://feedback.gorelo.io/changelog","label":"Changelog"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.mintlify.com"}},"footer":{"socials":{"x":"https://twitter.com/Goreloio","facebook":"https://www.facebook.com/gorelo.io","linkedin":"https://www.linkedin.com/company/gorelo","youtube":"https://www.youtube.com/@gorelotech","discord":"https://discord.com/invite/BpmP8BSrj6","website":"https://www.gorelo.io/"}},"seo":{"indexing":"navigable"},"fonts":{"family":"Inter","weight":400},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","default":true,"href":"what-is-gorelo"},{"language":"ar","href":"ar/what-is-gorelo"},{"language":"pt-BR","href":"pt-BR/what-is-gorelo"},{"language":"fr-CA","href":"fr-CA/what-is-gorelo"},{"language":"ca","href":"ca/what-is-gorelo"},{"language":"cn","href":"cn/what-is-gorelo"},{"language":"zh","href":"zh/what-is-gorelo"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"gorelo","hasAudioNarration":false,"actualSubdomain":"gorelo","customDomains":["help.gorelo.io"],"gitSource":{"type":"github","owner":"gorelo","repo":"gorelo_public_docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae361329ee4546ca4eb47b6","collectionId":"8ee7ab0f-1eb6-4083-8830-aafa475136bf","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae361329ee4546ca4eb47b6"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae361329ee4546ca4eb47b6","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"en","tag":"API","count":174},{"language":"ar","tag":"API","count":174},{"language":"ca","tag":"API","count":174},{"language":"cn","tag":"API","count":174},{"language":"fr-CA","tag":"API","count":174},{"language":"pt-BR","tag":"API","count":174},{"language":"zh","tag":"API","count":174},{"language":"en","tag":"API reference","count":171},{"language":"ar","tag":"مرجع API","count":171},{"language":"ca","tag":"Referència de l'API","count":171},{"language":"cn","tag":"API 参考","count":171},{"language":"fr-CA","tag":"Référence de l'API","count":171},{"language":"pt-BR","tag":"Referência da API","count":171},{"language":"zh","tag":"API 參考","count":171},{"language":"en","tag":"Billing","count":46},{"language":"en","tag":"Service Delivery","count":40},{"language":"ar","tag":"تقديم الخدمة","count":40},{"language":"ca","tag":"Prestació de servei","count":40},{"language":"cn","tag":"服务交付","count":40},{"language":"fr-CA","tag":"Prestation de services","count":40},{"language":"pt-BR","tag":"Entrega de serviços","count":40},{"language":"zh","tag":"服務交付","count":40},{"language":"ar","tag":"Billing","count":36},{"language":"ca","tag":"Billing","count":36},{"language":"cn","tag":"Billing","count":36},{"language":"fr-CA","tag":"Billing","count":36},{"language":"pt-BR","tag":"Billing","count":36},{"language":"zh","tag":"Billing","count":36},{"language":"en","tag":"Remote Management","count":35},{"language":"ar","tag":"الإدارة عن بُعد","count":35},{"language":"ca","tag":"Gestió remota","count":35},{"language":"cn","tag":"远程管理","count":35},{"language":"fr-CA","tag":"Gestion à distance","count":35},{"language":"pt-BR","tag":"Gerenciamento remoto","count":35},{"language":"zh","tag":"遠端管理","count":35},{"language":"en","tag":"Projects","count":34},{"language":"en","tag":"Assets","count":34},{"language":"ar","tag":"Projects","count":31},{"language":"ca","tag":"Projects","count":31},{"language":"cn","tag":"Projects","count":31},{"language":"fr-CA","tag":"Projects","count":31},{"language":"pt-BR","tag":"Projects","count":31},{"language":"zh","tag":"Projects","count":31},{"language":"ar","tag":"Assets","count":30},{"language":"ca","tag":"Assets","count":30},{"language":"cn","tag":"Assets","count":30},{"language":"fr-CA","tag":"Assets","count":30},{"language":"pt-BR","tag":"Assets","count":30},{"language":"zh","tag":"Assets","count":30},{"language":"en","tag":"Tickets","count":25},{"language":"pt-BR","tag":"Tickets","count":25},{"language":"en","tag":"How-to guides","count":19},{"language":"en","tag":"Documents","count":19},{"language":"ar","tag":"أدلة الكيفية","count":19},{"language":"ar","tag":"Tickets","count":19},{"language":"ca","tag":"Guies pràctiques","count":19},{"language":"ca","tag":"Documents","count":19},{"language":"ca","tag":"Tickets","count":19},{"language":"cn","tag":"操作指南","count":19},{"language":"cn","tag":"Tickets","count":19},{"language":"fr-CA","tag":"Guides pratiques","count":19},{"language":"fr-CA","tag":"Documents","count":19},{"language":"fr-CA","tag":"Tickets","count":19},{"language":"pt-BR","tag":"Guias práticos","count":19},{"language":"zh","tag":"操作指南","count":19},{"language":"zh","tag":"Tickets","count":19},{"language":"ar","tag":"Documents","count":16},{"language":"cn","tag":"Documents","count":16},{"language":"pt-BR","tag":"Documents","count":16},{"language":"zh","tag":"Documents","count":16}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"help@gorelo.io","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"ar/api-reference/billing/updates-a-contract-and-its-service-lines","slug":"/ar/api-reference/billing/updates-a-contract-and-its-service-lines","pageMetadata":{"title":"Updates a contract and its service lines.","description":"\n\r\n Every field is optional and a field left out keeps its value. `Reference`,\r\n `EndDate`, `InvoiceTemplateId`, `InvoiceEmailTemplateId` and\r\n `BrandingThemeId` clear with `null`; `ContactIds: []` removes every\r\n auto-approve contact. `StatusId` 3 archives the contract and 1 restores it.\r\n `ClientId` can't change. Once an invoice has been generated from the contract,\r\n `StartDate` and `RepeatPeriodId` are refused with 409.\r\n \r\n\n\r\n `ServiceLines` replaces the set, matched by `Id`: an entry with an `Id` updates\r\n that line, one without adds a line, and a line left out is removed, which is refused with 409\r\n while it has time logged that hasn't been invoiced. Each line's `LineItems` replaces its\r\n set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line\r\n `Balance` and the thresholds can change; the template and price can't.\r\n \r\n\nReturns the contract in the `GET /v1/contracts/{contractId}` shape.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/contracts/{contractId}","href":"/ar/api-reference/billing/updates-a-contract-and-its-service-lines","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Every field is optional and a field left out keeps its value. \", _jsx(_components.code, {\n children: \"Reference\"\n }), \",\\r\\n\", _jsx(_components.code, {\n children: \"EndDate\"\n }), \", \", _jsx(_components.code, {\n children: \"InvoiceTemplateId\"\n }), \", \", _jsx(_components.code, {\n children: \"InvoiceEmailTemplateId\"\n }), \" and\\r\\n\", _jsx(_components.code, {\n children: \"BrandingThemeId\"\n }), \" clear with \", _jsx(_components.code, {\n children: \"null\"\n }), \"; \", _jsx(_components.code, {\n children: \"ContactIds: []\"\n }), \" removes every\\r\\nauto-approve contact. \", _jsx(_components.code, {\n children: \"StatusId\"\n }), \" 3 archives the contract and 1 restores it.\\r\\n\", _jsx(_components.code, {\n children: \"ClientId\"\n }), \" can’t change. Once an invoice has been generated from the contract,\\r\\n\", _jsx(_components.code, {\n children: \"StartDate\"\n }), \" and \", _jsx(_components.code, {\n children: \"RepeatPeriodId\"\n }), \" are refused with 409.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"ServiceLines\"\n }), \" replaces the set, matched by \", _jsx(_components.code, {\n children: \"Id\"\n }), \": an entry with an \", _jsx(_components.code, {\n children: \"Id\"\n }), \" updates\\r\\nthat line, one without adds a line, and a line left out is removed, which is refused with 409\\r\\nwhile it has time logged that hasn’t been invoiced. Each line’s \", _jsx(_components.code, {\n children: \"LineItems\"\n }), \" replaces its\\r\\nset the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line\\r\\n\", _jsx(_components.code, {\n children: \"Balance\"\n }), \" and the thresholds can change; the template and price can’t.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Returns the contract in the \", _jsx(_components.code, {\n children: \"GET /v1/contracts/{contractId}\"\n }), \" shape.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=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":{"title":"Updates a contract and its service lines.","description":"\n\r\n Every field is optional and a field left out keeps its value. `Reference`,\r\n `EndDate`, `InvoiceTemplateId`, `InvoiceEmailTemplateId` and\r\n `BrandingThemeId` clear with `null`; `ContactIds: []` removes every\r\n auto-approve contact. `StatusId` 3 archives the contract and 1 restores it.\r\n `ClientId` can't change. Once an invoice has been generated from the contract,\r\n `StartDate` and `RepeatPeriodId` are refused with 409.\r\n \r\n\n\r\n `ServiceLines` replaces the set, matched by `Id`: an entry with an `Id` updates\r\n that line, one without adds a line, and a line left out is removed, which is refused with 409\r\n while it has time logged that hasn't been invoiced. Each line's `LineItems` replaces its\r\n set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line\r\n `Balance` and the thresholds can change; the template and price can't.\r\n \r\n\nReturns the contract in the `GET /v1/contracts/{contractId}` shape.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/contracts/{contractId}","href":"/ar/api-reference/billing/updates-a-contract-and-its-service-lines","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Billing"],"summary":"Updates a contract and its service lines.","description":"\n\r\n Every field is optional and a field left out keeps its value. `Reference`,\r\n `EndDate`, `InvoiceTemplateId`, `InvoiceEmailTemplateId` and\r\n `BrandingThemeId` clear with `null`; `ContactIds: []` removes every\r\n auto-approve contact. `StatusId` 3 archives the contract and 1 restores it.\r\n `ClientId` can't change. Once an invoice has been generated from the contract,\r\n `StartDate` and `RepeatPeriodId` are refused with 409.\r\n \r\n\n\r\n `ServiceLines` replaces the set, matched by `Id`: an entry with an `Id` updates\r\n that line, one without adds a line, and a line left out is removed, which is refused with 409\r\n while it has time logged that hasn't been invoiced. Each line's `LineItems` replaces its\r\n set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line\r\n `Balance` and the thresholds can change; the template and price can't.\r\n \r\n\nReturns the contract in the `GET /v1/contracts/{contractId}` shape.","operationId":"patch_v1_contracts_contractId","parameters":["d7e81f48-f174-43d3-875e-0ecbda7ac0d3"],"requestBody":"6ae04daa-7ab1-4cfa-950b-9029ff0f1926","responses":{"200":"44fdf2bf-95f4-4912-a4a5-04f039f703b7","400":"29ca90b7-1aba-4520-bf6e-d5b1b92001bb","401":"adb705cb-0774-4f44-ab42-3dcf87b6f7f7","404":"67b04657-1bc3-4a22-a969-2cb1faa2861a","409":"45f8f6e9-233b-4988-8f8e-bfc4ca181f53","500":"66b3961b-5d1b-4e40-bbc4-2e42ff91dd73"},"method":"patch","type":"path","servers":["b46ffe4c-4a54-4e1e-a59b-94a3878c23e4","31fc67d7-965e-4c8a-946c-9895ebae16df"],"security":["7b6acf03-bfa6-4539-9826-c3ecbd3f6d24"],"path":"/v1/contracts/{contractId}","baseUrlOptions":["https://api.usw.gorelo.io","https://api.aue.gorelo.io"],"title":"Updates a contract and its service lines.","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","urlDisplay":"full"},"dependencies":{"parameters":{"d7e81f48-f174-43d3-875e-0ecbda7ac0d3":{"name":"contractId","in":"path","description":"Identifier of the contract.","required":true,"schema":{"type":"integer","format":"int64","isRequired":true,"description":"Identifier of the contract.","uniqueKey":"","typeLabel":"integer\u003cint64>"}}},"requestBody":{"description":"Fields to change.","content":{"application/json-patch+json":{"schema":{"type":"object","properties":{"Name":{"oneOf":[{"type":"string","description":"Name of the contract. Not clearable.","uniqueKey":"Name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the contract. Not clearable.","uniqueKey":"Name.oneOf.1","typeLabel":"null"}],"uniqueKey":"Name","typeLabel":"string | null"},"ClientId":{"oneOf":[{"type":"integer","description":"Not accepted: a contract's client can't change, as in the app.","format":"int64","uniqueKey":"ClientId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Not accepted: a contract's client can't change, as in the app.","format":"int64","uniqueKey":"ClientId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ClientId","typeLabel":"integer\u003cint64> | null"},"StatusId":{"oneOf":[{"type":"integer","description":"1 Active or 3 Archived: the app's Restore and Archive. 2 Expired follows from EndDate and can't be set.","format":"int32","example":3,"uniqueKey":"StatusId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Active or 3 Archived: the app's Restore and Archive. 2 Expired follows from EndDate and can't be set.","format":"int32","example":3,"uniqueKey":"StatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"StatusId","typeLabel":"integer\u003cint32> | null"},"Reference":{"oneOf":[{"type":"string","description":"Free-text reference printed on the contract's invoices. Send null to clear it.","uniqueKey":"Reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"Free-text reference printed on the contract's invoices. Send null to clear it.","uniqueKey":"Reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"Reference","typeLabel":"string | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated\r\nfrom the contract. Line items keep their own dates. Not clearable.","format":"date-time","uniqueKey":"StartDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated\r\nfrom the contract. Line items keep their own dates. Not clearable.","format":"date-time","uniqueKey":"StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"StartDate","typeLabel":"string\u003cdate-time> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date coverage ends, a calendar date. Send null to make the contract open-ended.","format":"date-time","uniqueKey":"EndDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date coverage ends, a calendar date. Send null to make the contract open-ended.","format":"date-time","uniqueKey":"EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"EndDate","typeLabel":"string\u003cdate-time> | null"},"RepeatPeriodId":{"oneOf":[{"type":"integer","description":"1 Monthly, 2 Quarterly, 3 Yearly, 4 Half Yearly. Refused with 409 once an invoice has been generated.","format":"int32","uniqueKey":"RepeatPeriodId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Monthly, 2 Quarterly, 3 Yearly, 4 Half Yearly. Refused with 409 once an invoice has been generated.","format":"int32","uniqueKey":"RepeatPeriodId.oneOf.1","typeLabel":"null"}],"uniqueKey":"RepeatPeriodId","typeLabel":"integer\u003cint32> | null"},"DaysBeforeInvoiceCreation":{"oneOf":[{"type":"integer","description":"Days before the billing period ends that the invoice is created.","format":"int32","uniqueKey":"DaysBeforeInvoiceCreation.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Days before the billing period ends that the invoice is created.","format":"int32","uniqueKey":"DaysBeforeInvoiceCreation.oneOf.1","typeLabel":"null"}],"uniqueKey":"DaysBeforeInvoiceCreation","typeLabel":"integer\u003cint32> | null"},"DaysUntilDue":{"oneOf":[{"type":"integer","description":"Days the client has to pay.","format":"int32","uniqueKey":"DaysUntilDue.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Days the client has to pay.","format":"int32","uniqueKey":"DaysUntilDue.oneOf.1","typeLabel":"null"}],"uniqueKey":"DaysUntilDue","typeLabel":"integer\u003cint32> | null"},"AutoApproveAndSend":{"oneOf":[{"type":"boolean","description":"Approve and send each invoice raised from the contract automatically.","uniqueKey":"AutoApproveAndSend.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Approve and send each invoice raised from the contract automatically.","uniqueKey":"AutoApproveAndSend.oneOf.1","typeLabel":"null"}],"uniqueKey":"AutoApproveAndSend","typeLabel":"boolean | null"},"ContactIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ContactIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The auto-approve contacts, replacing the set. `[]` removes them all.","uniqueKey":"ContactIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The auto-approve contacts, replacing the set. `[]` removes them all.","uniqueKey":"ContactIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ContactIds","typeLabel":"integer\u003cint64>[] | null"},"IsForAllLocations":{"oneOf":[{"type":"boolean","description":"Whether the contract covers all the client's locations. False needs LocationIds, sent or already stored.","uniqueKey":"IsForAllLocations.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the contract covers all the client's locations. False needs LocationIds, sent or already stored.","uniqueKey":"IsForAllLocations.oneOf.1","typeLabel":"null"}],"uniqueKey":"IsForAllLocations","typeLabel":"boolean | null"},"LocationIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"LocationIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The locations covered, replacing the set. Read only when the contract is location-scoped.","uniqueKey":"LocationIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The locations covered, replacing the set. Read only when the contract is location-scoped.","uniqueKey":"LocationIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"LocationIds","typeLabel":"integer\u003cint64>[] | null"},"ProrateTypeId":{"oneOf":[{"type":"integer","description":"0 Do not prorate, 1 Prorate and add to next invoice, 2 Prorate and generate standalone invoice.","format":"int32","uniqueKey":"ProrateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"0 Do not prorate, 1 Prorate and add to next invoice, 2 Prorate and generate standalone invoice.","format":"int32","uniqueKey":"ProrateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ProrateTypeId","typeLabel":"integer\u003cint32> | null"},"AutoInvoiceTicketProducts":{"oneOf":[{"type":"boolean","description":"Sweep approved ticket products into the next recurring invoice. Only on an all-locations contract.","uniqueKey":"AutoInvoiceTicketProducts.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Sweep approved ticket products into the next recurring invoice. Only on an all-locations contract.","uniqueKey":"AutoInvoiceTicketProducts.oneOf.1","typeLabel":"null"}],"uniqueKey":"AutoInvoiceTicketProducts","typeLabel":"boolean | null"},"InvoiceTemplateId":{"oneOf":[{"type":"integer","description":"Invoice template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Invoice template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"InvoiceTemplateId","typeLabel":"integer\u003cint64> | null"},"InvoiceEmailTemplateId":{"oneOf":[{"type":"integer","description":"Email template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceEmailTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Email template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceEmailTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"InvoiceEmailTemplateId","typeLabel":"integer\u003cint64> | null"},"BrandingThemeId":{"oneOf":[{"type":"string","description":"Accounting-system branding theme for the contract's invoices. Send null to clear it.","format":"uuid","uniqueKey":"BrandingThemeId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"Accounting-system branding theme for the contract's invoices. Send null to clear it.","format":"uuid","uniqueKey":"BrandingThemeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"BrandingThemeId","typeLabel":"string\u003cuuid> | null"},"ServiceLines":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id","typeLabel":"integer\u003cint64> | null"},"Name":{"oneOf":[{"type":"string","description":"Name of the service line. Required on a new line.","example":"Managed Services","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the service line. Required on a new line.","example":"Managed Services","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name","typeLabel":"string | null"},"LaborTermsId":{"oneOf":[{"type":"integer","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId","typeLabel":"integer\u003cint32> | null"},"WorkTypeIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds","typeLabel":"integer\u003cint64>[] | null"},"WorkRoleIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds","typeLabel":"integer\u003cint64>[] | null"},"AutoApproveTime":{"oneOf":[{"type":"boolean","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime","typeLabel":"boolean | null"},"AutoInvoiceTime":{"oneOf":[{"type":"boolean","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime","typeLabel":"boolean | null"},"IncludedTimeGoesToId":{"oneOf":[{"type":"integer","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId","typeLabel":"integer\u003cint32> | null"},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].UnlimitedHoursDetails","typeLabel":"object"},"PerHourDetails":{"type":"object","properties":{"RateTypeId":{"oneOf":[{"type":"integer","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId","typeLabel":"integer\u003cint32> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles","typeLabel":"object[] | null"},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64> | null"},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails","typeLabel":"object"},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the allocation in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Show the client the hours left in the allocation in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean | null"},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period. Required on a new line.","format":"double","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours included each billing period. Required on a new line.","format":"double","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours","typeLabel":"number\u003cdouble> | null"},"RateTypeId":{"oneOf":[{"type":"integer","description":"Same as on `PerHourDetails`.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId","typeLabel":"integer\u003cint32> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Same as on `PerHourDetails`.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles","typeLabel":"object[] | null"},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64> | null"},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails","typeLabel":"object"},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the block in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Show the client the hours left in the block in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean | null"},"TemplateId":{"oneOf":[{"type":"integer","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId","typeLabel":"integer\u003cint64> | null"},"Balance":{"oneOf":[{"type":"number","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance","typeLabel":"number\u003cdouble> | null"},"Price":{"oneOf":[{"type":"number","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price","typeLabel":"number\u003cdouble> | null"},"WarningThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold","typeLabel":"integer\u003cint32> | null"},"OverrunThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails","typeLabel":"object"},"LineItems":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id","typeLabel":"integer\u003cint64> | null"},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId","typeLabel":"string\u003cuuid> | null"},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity","typeLabel":"number\u003cdouble> | null"},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description","typeLabel":"string | null"},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice","typeLabel":"number\u003cdouble> | null"},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost","typeLabel":"number\u003cdouble> | null"},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent","typeLabel":"number\u003cdouble> | null"},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId","typeLabel":"integer\u003cint64> | null"},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId","typeLabel":"integer\u003cint32> | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate","typeLabel":"string\u003cdate-time> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate","typeLabel":"string\u003cdate-time> | null"}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"One service line on `POST /v1/contracts` or `PATCH /v1/contracts/{contractId}`. Send\r\nexactly one details object, the one matching `LaborTermsId`; No Labor Terms takes none.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The service lines, replacing the set: an entry with an Id updates that line, one without adds\r\na line, and a line left out is removed. Leave the field out to keep the lines as they are.","uniqueKey":"ServiceLines.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214},{"type":"null","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214}]},"Name":{"oneOf":[{"type":"string","description":"Name of the service line. Required on a new line.","example":"Managed Services"},{"type":"null","description":"Name of the service line. Required on a new line.","example":"Managed Services"}]},"LaborTermsId":{"oneOf":[{"type":"integer","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1},{"type":"null","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1}]},"WorkTypeIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line."},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line."}]},"WorkRoleIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`."},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`."}]},"AutoApproveTime":{"oneOf":[{"type":"boolean","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false."},{"type":"null","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false."}]},"AutoInvoiceTime":{"oneOf":[{"type":"boolean","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false."},{"type":"null","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false."}]},"IncludedTimeGoesToId":{"oneOf":[{"type":"integer","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1},{"type":"null","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1}]},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false},"PerHourDetails":{"type":"object","properties":{"RateTypeId":{"oneOf":[{"type":"integer","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2},{"type":"null","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2}]},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150},{"type":"null","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150}]},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}}]},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}}]}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows."}},"additionalProperties":false},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the allocation in the client portal. Default false."},{"type":"null","description":"Show the client the hours left in the allocation in the client portal. Default false."}]},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period. Required on a new line.","format":"double","example":10},{"type":"null","description":"Hours included each billing period. Required on a new line.","format":"double","example":10}]},"RateTypeId":{"oneOf":[{"type":"integer","description":"Same as on `PerHourDetails`.","format":"int32"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"int32"}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Same as on `PerHourDetails`.","format":"double"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"double"}]},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}}]},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}}]}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows."}},"additionalProperties":false},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the block in the client portal. Default false."},{"type":"null","description":"Show the client the hours left in the block in the client portal. Default false."}]},"TemplateId":{"oneOf":[{"type":"integer","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0},{"type":"null","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0}]},"Balance":{"oneOf":[{"type":"number","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20},{"type":"null","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20}]},"Price":{"oneOf":[{"type":"number","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000},{"type":"null","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000}]},"WarningThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20},{"type":"null","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20}]},"OverrunThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10},{"type":"null","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10}]}},"additionalProperties":false},"LineItems":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are."},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are."}]}},"additionalProperties":false,"description":"One service line on `POST /v1/contracts` or `PATCH /v1/contracts/{contractId}`. Send\r\nexactly one details object, the one matching `LaborTermsId`; No Labor Terms takes none."},"description":"The service lines, replacing the set: an entry with an Id updates that line, one without adds\r\na line, and a line left out is removed. Leave the field out to keep the lines as they are.","uniqueKey":"ServiceLines.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Partial update of a contract. Every field is optional and a field left out keeps its value; a\r\nclearable field clears with `null`. `ServiceLines`, and each line's `LineItems`,\r\nreplace their set, matched by `Id`.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"Name":"\u003cstring>","ClientId":123,"StatusId":3,"Reference":"\u003cstring>","StartDate":"2023-11-07T05:31:56Z","EndDate":"2023-11-07T05:31:56Z","RepeatPeriodId":123,"DaysBeforeInvoiceCreation":123,"DaysUntilDue":123,"AutoApproveAndSend":true,"ContactIds":[123],"IsForAllLocations":true,"LocationIds":[123],"ProrateTypeId":123,"AutoInvoiceTicketProducts":true,"InvoiceTemplateId":123,"InvoiceEmailTemplateId":123,"BrandingThemeId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","ServiceLines":[{"Id":88214,"Name":"Managed Services","LaborTermsId":1,"WorkTypeIds":[123],"WorkRoleIds":[123],"AutoApproveTime":true,"AutoInvoiceTime":true,"IncludedTimeGoesToId":1,"UnlimitedHoursDetails":{},"PerHourDetails":{"RateTypeId":2,"HourlyRate":150,"CustomRates":{"WorkRoles":[{"WorkRoleId":12,"HourlyRate":95,"CoaCode":"270"}],"WorkTypes":[{"WorkTypeId":176,"HourlyMultiplier":1.5,"CoaCode":"200"}]}},"LimitedHoursDetails":{"ShowRemainingHoursInClientPortal":true,"AllocatedHours":10,"RateTypeId":123,"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":12,"HourlyRate":95,"CoaCode":"270"}],"WorkTypes":[{"WorkTypeId":176,"HourlyMultiplier":1.5,"CoaCode":"200"}]}},"BlockHoursDetails":{"ShowRemainingHoursInClientPortal":true,"TemplateId":0,"Balance":20,"Price":2000,"WarningThreshold":20,"OverrunThreshold":10},"LineItems":[{"Id":991204,"ItemId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","Quantity":12,"Description":"\u003cstring>","UnitPrice":24.2,"UnitCost":18.4,"DiscountPercent":123,"TaxId":2419,"BillableStatusId":123,"StartDate":"2023-11-07T05:31:56Z","EndDate":"2023-11-07T05:31:56Z"}]}]}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","properties":{"Name":{"oneOf":[{"type":"string","description":"Name of the contract. Not clearable.","uniqueKey":"Name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the contract. Not clearable.","uniqueKey":"Name.oneOf.1","typeLabel":"null"}],"uniqueKey":"Name","typeLabel":"string | null"},"ClientId":{"oneOf":[{"type":"integer","description":"Not accepted: a contract's client can't change, as in the app.","format":"int64","uniqueKey":"ClientId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Not accepted: a contract's client can't change, as in the app.","format":"int64","uniqueKey":"ClientId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ClientId","typeLabel":"integer\u003cint64> | null"},"StatusId":{"oneOf":[{"type":"integer","description":"1 Active or 3 Archived: the app's Restore and Archive. 2 Expired follows from EndDate and can't be set.","format":"int32","example":3,"uniqueKey":"StatusId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Active or 3 Archived: the app's Restore and Archive. 2 Expired follows from EndDate and can't be set.","format":"int32","example":3,"uniqueKey":"StatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"StatusId","typeLabel":"integer\u003cint32> | null"},"Reference":{"oneOf":[{"type":"string","description":"Free-text reference printed on the contract's invoices. Send null to clear it.","uniqueKey":"Reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"Free-text reference printed on the contract's invoices. Send null to clear it.","uniqueKey":"Reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"Reference","typeLabel":"string | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated\r\nfrom the contract. Line items keep their own dates. Not clearable.","format":"date-time","uniqueKey":"StartDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated\r\nfrom the contract. Line items keep their own dates. Not clearable.","format":"date-time","uniqueKey":"StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"StartDate","typeLabel":"string\u003cdate-time> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date coverage ends, a calendar date. Send null to make the contract open-ended.","format":"date-time","uniqueKey":"EndDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date coverage ends, a calendar date. Send null to make the contract open-ended.","format":"date-time","uniqueKey":"EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"EndDate","typeLabel":"string\u003cdate-time> | null"},"RepeatPeriodId":{"oneOf":[{"type":"integer","description":"1 Monthly, 2 Quarterly, 3 Yearly, 4 Half Yearly. Refused with 409 once an invoice has been generated.","format":"int32","uniqueKey":"RepeatPeriodId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Monthly, 2 Quarterly, 3 Yearly, 4 Half Yearly. Refused with 409 once an invoice has been generated.","format":"int32","uniqueKey":"RepeatPeriodId.oneOf.1","typeLabel":"null"}],"uniqueKey":"RepeatPeriodId","typeLabel":"integer\u003cint32> | null"},"DaysBeforeInvoiceCreation":{"oneOf":[{"type":"integer","description":"Days before the billing period ends that the invoice is created.","format":"int32","uniqueKey":"DaysBeforeInvoiceCreation.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Days before the billing period ends that the invoice is created.","format":"int32","uniqueKey":"DaysBeforeInvoiceCreation.oneOf.1","typeLabel":"null"}],"uniqueKey":"DaysBeforeInvoiceCreation","typeLabel":"integer\u003cint32> | null"},"DaysUntilDue":{"oneOf":[{"type":"integer","description":"Days the client has to pay.","format":"int32","uniqueKey":"DaysUntilDue.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Days the client has to pay.","format":"int32","uniqueKey":"DaysUntilDue.oneOf.1","typeLabel":"null"}],"uniqueKey":"DaysUntilDue","typeLabel":"integer\u003cint32> | null"},"AutoApproveAndSend":{"oneOf":[{"type":"boolean","description":"Approve and send each invoice raised from the contract automatically.","uniqueKey":"AutoApproveAndSend.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Approve and send each invoice raised from the contract automatically.","uniqueKey":"AutoApproveAndSend.oneOf.1","typeLabel":"null"}],"uniqueKey":"AutoApproveAndSend","typeLabel":"boolean | null"},"ContactIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ContactIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The auto-approve contacts, replacing the set. `[]` removes them all.","uniqueKey":"ContactIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The auto-approve contacts, replacing the set. `[]` removes them all.","uniqueKey":"ContactIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ContactIds","typeLabel":"integer\u003cint64>[] | null"},"IsForAllLocations":{"oneOf":[{"type":"boolean","description":"Whether the contract covers all the client's locations. False needs LocationIds, sent or already stored.","uniqueKey":"IsForAllLocations.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the contract covers all the client's locations. False needs LocationIds, sent or already stored.","uniqueKey":"IsForAllLocations.oneOf.1","typeLabel":"null"}],"uniqueKey":"IsForAllLocations","typeLabel":"boolean | null"},"LocationIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"LocationIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The locations covered, replacing the set. Read only when the contract is location-scoped.","uniqueKey":"LocationIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The locations covered, replacing the set. Read only when the contract is location-scoped.","uniqueKey":"LocationIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"LocationIds","typeLabel":"integer\u003cint64>[] | null"},"ProrateTypeId":{"oneOf":[{"type":"integer","description":"0 Do not prorate, 1 Prorate and add to next invoice, 2 Prorate and generate standalone invoice.","format":"int32","uniqueKey":"ProrateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"0 Do not prorate, 1 Prorate and add to next invoice, 2 Prorate and generate standalone invoice.","format":"int32","uniqueKey":"ProrateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ProrateTypeId","typeLabel":"integer\u003cint32> | null"},"AutoInvoiceTicketProducts":{"oneOf":[{"type":"boolean","description":"Sweep approved ticket products into the next recurring invoice. Only on an all-locations contract.","uniqueKey":"AutoInvoiceTicketProducts.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Sweep approved ticket products into the next recurring invoice. Only on an all-locations contract.","uniqueKey":"AutoInvoiceTicketProducts.oneOf.1","typeLabel":"null"}],"uniqueKey":"AutoInvoiceTicketProducts","typeLabel":"boolean | null"},"InvoiceTemplateId":{"oneOf":[{"type":"integer","description":"Invoice template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Invoice template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"InvoiceTemplateId","typeLabel":"integer\u003cint64> | null"},"InvoiceEmailTemplateId":{"oneOf":[{"type":"integer","description":"Email template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceEmailTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Email template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceEmailTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"InvoiceEmailTemplateId","typeLabel":"integer\u003cint64> | null"},"BrandingThemeId":{"oneOf":[{"type":"string","description":"Accounting-system branding theme for the contract's invoices. Send null to clear it.","format":"uuid","uniqueKey":"BrandingThemeId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"Accounting-system branding theme for the contract's invoices. Send null to clear it.","format":"uuid","uniqueKey":"BrandingThemeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"BrandingThemeId","typeLabel":"string\u003cuuid> | null"},"ServiceLines":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id","typeLabel":"integer\u003cint64> | null"},"Name":{"oneOf":[{"type":"string","description":"Name of the service line. Required on a new line.","example":"Managed Services","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the service line. Required on a new line.","example":"Managed Services","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name","typeLabel":"string | null"},"LaborTermsId":{"oneOf":[{"type":"integer","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId","typeLabel":"integer\u003cint32> | null"},"WorkTypeIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds","typeLabel":"integer\u003cint64>[] | null"},"WorkRoleIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds","typeLabel":"integer\u003cint64>[] | null"},"AutoApproveTime":{"oneOf":[{"type":"boolean","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime","typeLabel":"boolean | null"},"AutoInvoiceTime":{"oneOf":[{"type":"boolean","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime","typeLabel":"boolean | null"},"IncludedTimeGoesToId":{"oneOf":[{"type":"integer","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId","typeLabel":"integer\u003cint32> | null"},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].UnlimitedHoursDetails","typeLabel":"object"},"PerHourDetails":{"type":"object","properties":{"RateTypeId":{"oneOf":[{"type":"integer","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId","typeLabel":"integer\u003cint32> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles","typeLabel":"object[] | null"},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64> | null"},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails","typeLabel":"object"},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the allocation in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Show the client the hours left in the allocation in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean | null"},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period. Required on a new line.","format":"double","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours included each billing period. Required on a new line.","format":"double","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours","typeLabel":"number\u003cdouble> | null"},"RateTypeId":{"oneOf":[{"type":"integer","description":"Same as on `PerHourDetails`.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId","typeLabel":"integer\u003cint32> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Same as on `PerHourDetails`.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles","typeLabel":"object[] | null"},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64> | null"},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails","typeLabel":"object"},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the block in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Show the client the hours left in the block in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean | null"},"TemplateId":{"oneOf":[{"type":"integer","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId","typeLabel":"integer\u003cint64> | null"},"Balance":{"oneOf":[{"type":"number","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance","typeLabel":"number\u003cdouble> | null"},"Price":{"oneOf":[{"type":"number","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price","typeLabel":"number\u003cdouble> | null"},"WarningThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold","typeLabel":"integer\u003cint32> | null"},"OverrunThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails","typeLabel":"object"},"LineItems":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id","typeLabel":"integer\u003cint64> | null"},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId","typeLabel":"string\u003cuuid> | null"},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity","typeLabel":"number\u003cdouble> | null"},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description","typeLabel":"string | null"},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice","typeLabel":"number\u003cdouble> | null"},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost","typeLabel":"number\u003cdouble> | null"},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent","typeLabel":"number\u003cdouble> | null"},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId","typeLabel":"integer\u003cint64> | null"},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId","typeLabel":"integer\u003cint32> | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate","typeLabel":"string\u003cdate-time> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate","typeLabel":"string\u003cdate-time> | null"}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"One service line on `POST /v1/contracts` or `PATCH /v1/contracts/{contractId}`. Send\r\nexactly one details object, the one matching `LaborTermsId`; No Labor Terms takes none.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The service lines, replacing the set: an entry with an Id updates that line, one without adds\r\na line, and a line left out is removed. Leave the field out to keep the lines as they are.","uniqueKey":"ServiceLines.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214},{"type":"null","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214}]},"Name":{"oneOf":[{"type":"string","description":"Name of the service line. Required on a new line.","example":"Managed Services"},{"type":"null","description":"Name of the service line. Required on a new line.","example":"Managed Services"}]},"LaborTermsId":{"oneOf":[{"type":"integer","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1},{"type":"null","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1}]},"WorkTypeIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line."},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line."}]},"WorkRoleIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`."},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`."}]},"AutoApproveTime":{"oneOf":[{"type":"boolean","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false."},{"type":"null","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false."}]},"AutoInvoiceTime":{"oneOf":[{"type":"boolean","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false."},{"type":"null","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false."}]},"IncludedTimeGoesToId":{"oneOf":[{"type":"integer","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1},{"type":"null","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1}]},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false},"PerHourDetails":{"type":"object","properties":{"RateTypeId":{"oneOf":[{"type":"integer","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2},{"type":"null","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2}]},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150},{"type":"null","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150}]},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}}]},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}}]}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows."}},"additionalProperties":false},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the allocation in the client portal. Default false."},{"type":"null","description":"Show the client the hours left in the allocation in the client portal. Default false."}]},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period. Required on a new line.","format":"double","example":10},{"type":"null","description":"Hours included each billing period. Required on a new line.","format":"double","example":10}]},"RateTypeId":{"oneOf":[{"type":"integer","description":"Same as on `PerHourDetails`.","format":"int32"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"int32"}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Same as on `PerHourDetails`.","format":"double"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"double"}]},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}}]},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}}]}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows."}},"additionalProperties":false},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the block in the client portal. Default false."},{"type":"null","description":"Show the client the hours left in the block in the client portal. Default false."}]},"TemplateId":{"oneOf":[{"type":"integer","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0},{"type":"null","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0}]},"Balance":{"oneOf":[{"type":"number","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20},{"type":"null","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20}]},"Price":{"oneOf":[{"type":"number","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000},{"type":"null","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000}]},"WarningThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20},{"type":"null","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20}]},"OverrunThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10},{"type":"null","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10}]}},"additionalProperties":false},"LineItems":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are."},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are."}]}},"additionalProperties":false,"description":"One service line on `POST /v1/contracts` or `PATCH /v1/contracts/{contractId}`. Send\r\nexactly one details object, the one matching `LaborTermsId`; No Labor Terms takes none."},"description":"The service lines, replacing the set: an entry with an Id updates that line, one without adds\r\na line, and a line left out is removed. Leave the field out to keep the lines as they are.","uniqueKey":"ServiceLines.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Partial update of a contract. Every field is optional and a field left out keeps its value; a\r\nclearable field clears with `null`. `ServiceLines`, and each line's `LineItems`,\r\nreplace their set, matched by `Id`.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"Name":"\u003cstring>","ClientId":123,"StatusId":3,"Reference":"\u003cstring>","StartDate":"2023-11-07T05:31:56Z","EndDate":"2023-11-07T05:31:56Z","RepeatPeriodId":123,"DaysBeforeInvoiceCreation":123,"DaysUntilDue":123,"AutoApproveAndSend":true,"ContactIds":[123],"IsForAllLocations":true,"LocationIds":[123],"ProrateTypeId":123,"AutoInvoiceTicketProducts":true,"InvoiceTemplateId":123,"InvoiceEmailTemplateId":123,"BrandingThemeId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","ServiceLines":[{"Id":88214,"Name":"Managed Services","LaborTermsId":1,"WorkTypeIds":[123],"WorkRoleIds":[123],"AutoApproveTime":true,"AutoInvoiceTime":true,"IncludedTimeGoesToId":1,"UnlimitedHoursDetails":{},"PerHourDetails":{"RateTypeId":2,"HourlyRate":150,"CustomRates":{"WorkRoles":[{"WorkRoleId":12,"HourlyRate":95,"CoaCode":"270"}],"WorkTypes":[{"WorkTypeId":176,"HourlyMultiplier":1.5,"CoaCode":"200"}]}},"LimitedHoursDetails":{"ShowRemainingHoursInClientPortal":true,"AllocatedHours":10,"RateTypeId":123,"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":12,"HourlyRate":95,"CoaCode":"270"}],"WorkTypes":[{"WorkTypeId":176,"HourlyMultiplier":1.5,"CoaCode":"200"}]}},"BlockHoursDetails":{"ShowRemainingHoursInClientPortal":true,"TemplateId":0,"Balance":20,"Price":2000,"WarningThreshold":20,"OverrunThreshold":10},"LineItems":[{"Id":991204,"ItemId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","Quantity":12,"Description":"\u003cstring>","UnitPrice":24.2,"UnitCost":18.4,"DiscountPercent":123,"TaxId":2419,"BillableStatusId":123,"StartDate":"2023-11-07T05:31:56Z","EndDate":"2023-11-07T05:31:56Z"}]}]}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"Name":{"oneOf":[{"type":"string","description":"Name of the contract. Not clearable.","uniqueKey":"Name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the contract. Not clearable.","uniqueKey":"Name.oneOf.1","typeLabel":"null"}],"uniqueKey":"Name","typeLabel":"string | null"},"ClientId":{"oneOf":[{"type":"integer","description":"Not accepted: a contract's client can't change, as in the app.","format":"int64","uniqueKey":"ClientId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Not accepted: a contract's client can't change, as in the app.","format":"int64","uniqueKey":"ClientId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ClientId","typeLabel":"integer\u003cint64> | null"},"StatusId":{"oneOf":[{"type":"integer","description":"1 Active or 3 Archived: the app's Restore and Archive. 2 Expired follows from EndDate and can't be set.","format":"int32","example":3,"uniqueKey":"StatusId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Active or 3 Archived: the app's Restore and Archive. 2 Expired follows from EndDate and can't be set.","format":"int32","example":3,"uniqueKey":"StatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"StatusId","typeLabel":"integer\u003cint32> | null"},"Reference":{"oneOf":[{"type":"string","description":"Free-text reference printed on the contract's invoices. Send null to clear it.","uniqueKey":"Reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"Free-text reference printed on the contract's invoices. Send null to clear it.","uniqueKey":"Reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"Reference","typeLabel":"string | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated\r\nfrom the contract. Line items keep their own dates. Not clearable.","format":"date-time","uniqueKey":"StartDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated\r\nfrom the contract. Line items keep their own dates. Not clearable.","format":"date-time","uniqueKey":"StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"StartDate","typeLabel":"string\u003cdate-time> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date coverage ends, a calendar date. Send null to make the contract open-ended.","format":"date-time","uniqueKey":"EndDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date coverage ends, a calendar date. Send null to make the contract open-ended.","format":"date-time","uniqueKey":"EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"EndDate","typeLabel":"string\u003cdate-time> | null"},"RepeatPeriodId":{"oneOf":[{"type":"integer","description":"1 Monthly, 2 Quarterly, 3 Yearly, 4 Half Yearly. Refused with 409 once an invoice has been generated.","format":"int32","uniqueKey":"RepeatPeriodId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Monthly, 2 Quarterly, 3 Yearly, 4 Half Yearly. Refused with 409 once an invoice has been generated.","format":"int32","uniqueKey":"RepeatPeriodId.oneOf.1","typeLabel":"null"}],"uniqueKey":"RepeatPeriodId","typeLabel":"integer\u003cint32> | null"},"DaysBeforeInvoiceCreation":{"oneOf":[{"type":"integer","description":"Days before the billing period ends that the invoice is created.","format":"int32","uniqueKey":"DaysBeforeInvoiceCreation.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Days before the billing period ends that the invoice is created.","format":"int32","uniqueKey":"DaysBeforeInvoiceCreation.oneOf.1","typeLabel":"null"}],"uniqueKey":"DaysBeforeInvoiceCreation","typeLabel":"integer\u003cint32> | null"},"DaysUntilDue":{"oneOf":[{"type":"integer","description":"Days the client has to pay.","format":"int32","uniqueKey":"DaysUntilDue.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Days the client has to pay.","format":"int32","uniqueKey":"DaysUntilDue.oneOf.1","typeLabel":"null"}],"uniqueKey":"DaysUntilDue","typeLabel":"integer\u003cint32> | null"},"AutoApproveAndSend":{"oneOf":[{"type":"boolean","description":"Approve and send each invoice raised from the contract automatically.","uniqueKey":"AutoApproveAndSend.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Approve and send each invoice raised from the contract automatically.","uniqueKey":"AutoApproveAndSend.oneOf.1","typeLabel":"null"}],"uniqueKey":"AutoApproveAndSend","typeLabel":"boolean | null"},"ContactIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ContactIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The auto-approve contacts, replacing the set. `[]` removes them all.","uniqueKey":"ContactIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The auto-approve contacts, replacing the set. `[]` removes them all.","uniqueKey":"ContactIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ContactIds","typeLabel":"integer\u003cint64>[] | null"},"IsForAllLocations":{"oneOf":[{"type":"boolean","description":"Whether the contract covers all the client's locations. False needs LocationIds, sent or already stored.","uniqueKey":"IsForAllLocations.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the contract covers all the client's locations. False needs LocationIds, sent or already stored.","uniqueKey":"IsForAllLocations.oneOf.1","typeLabel":"null"}],"uniqueKey":"IsForAllLocations","typeLabel":"boolean | null"},"LocationIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"LocationIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The locations covered, replacing the set. Read only when the contract is location-scoped.","uniqueKey":"LocationIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The locations covered, replacing the set. Read only when the contract is location-scoped.","uniqueKey":"LocationIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"LocationIds","typeLabel":"integer\u003cint64>[] | null"},"ProrateTypeId":{"oneOf":[{"type":"integer","description":"0 Do not prorate, 1 Prorate and add to next invoice, 2 Prorate and generate standalone invoice.","format":"int32","uniqueKey":"ProrateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"0 Do not prorate, 1 Prorate and add to next invoice, 2 Prorate and generate standalone invoice.","format":"int32","uniqueKey":"ProrateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ProrateTypeId","typeLabel":"integer\u003cint32> | null"},"AutoInvoiceTicketProducts":{"oneOf":[{"type":"boolean","description":"Sweep approved ticket products into the next recurring invoice. Only on an all-locations contract.","uniqueKey":"AutoInvoiceTicketProducts.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Sweep approved ticket products into the next recurring invoice. Only on an all-locations contract.","uniqueKey":"AutoInvoiceTicketProducts.oneOf.1","typeLabel":"null"}],"uniqueKey":"AutoInvoiceTicketProducts","typeLabel":"boolean | null"},"InvoiceTemplateId":{"oneOf":[{"type":"integer","description":"Invoice template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Invoice template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"InvoiceTemplateId","typeLabel":"integer\u003cint64> | null"},"InvoiceEmailTemplateId":{"oneOf":[{"type":"integer","description":"Email template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceEmailTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Email template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceEmailTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"InvoiceEmailTemplateId","typeLabel":"integer\u003cint64> | null"},"BrandingThemeId":{"oneOf":[{"type":"string","description":"Accounting-system branding theme for the contract's invoices. Send null to clear it.","format":"uuid","uniqueKey":"BrandingThemeId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"Accounting-system branding theme for the contract's invoices. Send null to clear it.","format":"uuid","uniqueKey":"BrandingThemeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"BrandingThemeId","typeLabel":"string\u003cuuid> | null"},"ServiceLines":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id","typeLabel":"integer\u003cint64> | null"},"Name":{"oneOf":[{"type":"string","description":"Name of the service line. Required on a new line.","example":"Managed Services","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the service line. Required on a new line.","example":"Managed Services","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name","typeLabel":"string | null"},"LaborTermsId":{"oneOf":[{"type":"integer","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId","typeLabel":"integer\u003cint32> | null"},"WorkTypeIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds","typeLabel":"integer\u003cint64>[] | null"},"WorkRoleIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds","typeLabel":"integer\u003cint64>[] | null"},"AutoApproveTime":{"oneOf":[{"type":"boolean","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime","typeLabel":"boolean | null"},"AutoInvoiceTime":{"oneOf":[{"type":"boolean","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime","typeLabel":"boolean | null"},"IncludedTimeGoesToId":{"oneOf":[{"type":"integer","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId","typeLabel":"integer\u003cint32> | null"},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].UnlimitedHoursDetails","typeLabel":"object"},"PerHourDetails":{"type":"object","properties":{"RateTypeId":{"oneOf":[{"type":"integer","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId","typeLabel":"integer\u003cint32> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles","typeLabel":"object[] | null"},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64> | null"},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails","typeLabel":"object"},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the allocation in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Show the client the hours left in the allocation in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean | null"},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period. Required on a new line.","format":"double","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours included each billing period. Required on a new line.","format":"double","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours","typeLabel":"number\u003cdouble> | null"},"RateTypeId":{"oneOf":[{"type":"integer","description":"Same as on `PerHourDetails`.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId","typeLabel":"integer\u003cint32> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Same as on `PerHourDetails`.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles","typeLabel":"object[] | null"},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64> | null"},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails","typeLabel":"object"},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the block in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Show the client the hours left in the block in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean | null"},"TemplateId":{"oneOf":[{"type":"integer","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId","typeLabel":"integer\u003cint64> | null"},"Balance":{"oneOf":[{"type":"number","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance","typeLabel":"number\u003cdouble> | null"},"Price":{"oneOf":[{"type":"number","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price","typeLabel":"number\u003cdouble> | null"},"WarningThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold","typeLabel":"integer\u003cint32> | null"},"OverrunThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails","typeLabel":"object"},"LineItems":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id","typeLabel":"integer\u003cint64> | null"},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId","typeLabel":"string\u003cuuid> | null"},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity","typeLabel":"number\u003cdouble> | null"},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description","typeLabel":"string | null"},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice","typeLabel":"number\u003cdouble> | null"},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost","typeLabel":"number\u003cdouble> | null"},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent","typeLabel":"number\u003cdouble> | null"},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId","typeLabel":"integer\u003cint64> | null"},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId","typeLabel":"integer\u003cint32> | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate","typeLabel":"string\u003cdate-time> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate","typeLabel":"string\u003cdate-time> | null"}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"One service line on `POST /v1/contracts` or `PATCH /v1/contracts/{contractId}`. Send\r\nexactly one details object, the one matching `LaborTermsId`; No Labor Terms takes none.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The service lines, replacing the set: an entry with an Id updates that line, one without adds\r\na line, and a line left out is removed. Leave the field out to keep the lines as they are.","uniqueKey":"ServiceLines.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214},{"type":"null","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214}]},"Name":{"oneOf":[{"type":"string","description":"Name of the service line. Required on a new line.","example":"Managed Services"},{"type":"null","description":"Name of the service line. Required on a new line.","example":"Managed Services"}]},"LaborTermsId":{"oneOf":[{"type":"integer","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1},{"type":"null","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1}]},"WorkTypeIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line."},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line."}]},"WorkRoleIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`."},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`."}]},"AutoApproveTime":{"oneOf":[{"type":"boolean","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false."},{"type":"null","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false."}]},"AutoInvoiceTime":{"oneOf":[{"type":"boolean","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false."},{"type":"null","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false."}]},"IncludedTimeGoesToId":{"oneOf":[{"type":"integer","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1},{"type":"null","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1}]},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false},"PerHourDetails":{"type":"object","properties":{"RateTypeId":{"oneOf":[{"type":"integer","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2},{"type":"null","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2}]},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150},{"type":"null","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150}]},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}}]},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}}]}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows."}},"additionalProperties":false},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the allocation in the client portal. Default false."},{"type":"null","description":"Show the client the hours left in the allocation in the client portal. Default false."}]},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period. Required on a new line.","format":"double","example":10},{"type":"null","description":"Hours included each billing period. Required on a new line.","format":"double","example":10}]},"RateTypeId":{"oneOf":[{"type":"integer","description":"Same as on `PerHourDetails`.","format":"int32"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"int32"}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Same as on `PerHourDetails`.","format":"double"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"double"}]},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}}]},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}}]}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows."}},"additionalProperties":false},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the block in the client portal. Default false."},{"type":"null","description":"Show the client the hours left in the block in the client portal. Default false."}]},"TemplateId":{"oneOf":[{"type":"integer","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0},{"type":"null","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0}]},"Balance":{"oneOf":[{"type":"number","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20},{"type":"null","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20}]},"Price":{"oneOf":[{"type":"number","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000},{"type":"null","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000}]},"WarningThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20},{"type":"null","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20}]},"OverrunThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10},{"type":"null","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10}]}},"additionalProperties":false},"LineItems":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are."},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are."}]}},"additionalProperties":false,"description":"One service line on `POST /v1/contracts` or `PATCH /v1/contracts/{contractId}`. Send\r\nexactly one details object, the one matching `LaborTermsId`; No Labor Terms takes none."},"description":"The service lines, replacing the set: an entry with an Id updates that line, one without adds\r\na line, and a line left out is removed. Leave the field out to keep the lines as they are.","uniqueKey":"ServiceLines.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Partial update of a contract. Every field is optional and a field left out keeps its value; a\r\nclearable field clears with `null`. `ServiceLines`, and each line's `LineItems`,\r\nreplace their set, matched by `Id`.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"Name":"\u003cstring>","ClientId":123,"StatusId":3,"Reference":"\u003cstring>","StartDate":"2023-11-07T05:31:56Z","EndDate":"2023-11-07T05:31:56Z","RepeatPeriodId":123,"DaysBeforeInvoiceCreation":123,"DaysUntilDue":123,"AutoApproveAndSend":true,"ContactIds":[123],"IsForAllLocations":true,"LocationIds":[123],"ProrateTypeId":123,"AutoInvoiceTicketProducts":true,"InvoiceTemplateId":123,"InvoiceEmailTemplateId":123,"BrandingThemeId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","ServiceLines":[{"Id":88214,"Name":"Managed Services","LaborTermsId":1,"WorkTypeIds":[123],"WorkRoleIds":[123],"AutoApproveTime":true,"AutoInvoiceTime":true,"IncludedTimeGoesToId":1,"UnlimitedHoursDetails":{},"PerHourDetails":{"RateTypeId":2,"HourlyRate":150,"CustomRates":{"WorkRoles":[{"WorkRoleId":12,"HourlyRate":95,"CoaCode":"270"}],"WorkTypes":[{"WorkTypeId":176,"HourlyMultiplier":1.5,"CoaCode":"200"}]}},"LimitedHoursDetails":{"ShowRemainingHoursInClientPortal":true,"AllocatedHours":10,"RateTypeId":123,"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":12,"HourlyRate":95,"CoaCode":"270"}],"WorkTypes":[{"WorkTypeId":176,"HourlyMultiplier":1.5,"CoaCode":"200"}]}},"BlockHoursDetails":{"ShowRemainingHoursInClientPortal":true,"TemplateId":0,"Balance":20,"Price":2000,"WarningThreshold":20,"OverrunThreshold":10},"LineItems":[{"Id":991204,"ItemId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","Quantity":12,"Description":"\u003cstring>","UnitPrice":24.2,"UnitCost":18.4,"DiscountPercent":123,"TaxId":2419,"BillableStatusId":123,"StartDate":"2023-11-07T05:31:56Z","EndDate":"2023-11-07T05:31:56Z"}]}]}}},"exampleType":"generated"},"application/*+json":{"schema":{"type":"object","properties":{"Name":{"oneOf":[{"type":"string","description":"Name of the contract. Not clearable.","uniqueKey":"Name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the contract. Not clearable.","uniqueKey":"Name.oneOf.1","typeLabel":"null"}],"uniqueKey":"Name","typeLabel":"string | null"},"ClientId":{"oneOf":[{"type":"integer","description":"Not accepted: a contract's client can't change, as in the app.","format":"int64","uniqueKey":"ClientId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Not accepted: a contract's client can't change, as in the app.","format":"int64","uniqueKey":"ClientId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ClientId","typeLabel":"integer\u003cint64> | null"},"StatusId":{"oneOf":[{"type":"integer","description":"1 Active or 3 Archived: the app's Restore and Archive. 2 Expired follows from EndDate and can't be set.","format":"int32","example":3,"uniqueKey":"StatusId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Active or 3 Archived: the app's Restore and Archive. 2 Expired follows from EndDate and can't be set.","format":"int32","example":3,"uniqueKey":"StatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"StatusId","typeLabel":"integer\u003cint32> | null"},"Reference":{"oneOf":[{"type":"string","description":"Free-text reference printed on the contract's invoices. Send null to clear it.","uniqueKey":"Reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"Free-text reference printed on the contract's invoices. Send null to clear it.","uniqueKey":"Reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"Reference","typeLabel":"string | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated\r\nfrom the contract. Line items keep their own dates. Not clearable.","format":"date-time","uniqueKey":"StartDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date coverage starts, a calendar date. Refused with 409 once an invoice has been generated\r\nfrom the contract. Line items keep their own dates. Not clearable.","format":"date-time","uniqueKey":"StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"StartDate","typeLabel":"string\u003cdate-time> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date coverage ends, a calendar date. Send null to make the contract open-ended.","format":"date-time","uniqueKey":"EndDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date coverage ends, a calendar date. Send null to make the contract open-ended.","format":"date-time","uniqueKey":"EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"EndDate","typeLabel":"string\u003cdate-time> | null"},"RepeatPeriodId":{"oneOf":[{"type":"integer","description":"1 Monthly, 2 Quarterly, 3 Yearly, 4 Half Yearly. Refused with 409 once an invoice has been generated.","format":"int32","uniqueKey":"RepeatPeriodId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Monthly, 2 Quarterly, 3 Yearly, 4 Half Yearly. Refused with 409 once an invoice has been generated.","format":"int32","uniqueKey":"RepeatPeriodId.oneOf.1","typeLabel":"null"}],"uniqueKey":"RepeatPeriodId","typeLabel":"integer\u003cint32> | null"},"DaysBeforeInvoiceCreation":{"oneOf":[{"type":"integer","description":"Days before the billing period ends that the invoice is created.","format":"int32","uniqueKey":"DaysBeforeInvoiceCreation.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Days before the billing period ends that the invoice is created.","format":"int32","uniqueKey":"DaysBeforeInvoiceCreation.oneOf.1","typeLabel":"null"}],"uniqueKey":"DaysBeforeInvoiceCreation","typeLabel":"integer\u003cint32> | null"},"DaysUntilDue":{"oneOf":[{"type":"integer","description":"Days the client has to pay.","format":"int32","uniqueKey":"DaysUntilDue.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Days the client has to pay.","format":"int32","uniqueKey":"DaysUntilDue.oneOf.1","typeLabel":"null"}],"uniqueKey":"DaysUntilDue","typeLabel":"integer\u003cint32> | null"},"AutoApproveAndSend":{"oneOf":[{"type":"boolean","description":"Approve and send each invoice raised from the contract automatically.","uniqueKey":"AutoApproveAndSend.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Approve and send each invoice raised from the contract automatically.","uniqueKey":"AutoApproveAndSend.oneOf.1","typeLabel":"null"}],"uniqueKey":"AutoApproveAndSend","typeLabel":"boolean | null"},"ContactIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ContactIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The auto-approve contacts, replacing the set. `[]` removes them all.","uniqueKey":"ContactIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The auto-approve contacts, replacing the set. `[]` removes them all.","uniqueKey":"ContactIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ContactIds","typeLabel":"integer\u003cint64>[] | null"},"IsForAllLocations":{"oneOf":[{"type":"boolean","description":"Whether the contract covers all the client's locations. False needs LocationIds, sent or already stored.","uniqueKey":"IsForAllLocations.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the contract covers all the client's locations. False needs LocationIds, sent or already stored.","uniqueKey":"IsForAllLocations.oneOf.1","typeLabel":"null"}],"uniqueKey":"IsForAllLocations","typeLabel":"boolean | null"},"LocationIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"LocationIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The locations covered, replacing the set. Read only when the contract is location-scoped.","uniqueKey":"LocationIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The locations covered, replacing the set. Read only when the contract is location-scoped.","uniqueKey":"LocationIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"LocationIds","typeLabel":"integer\u003cint64>[] | null"},"ProrateTypeId":{"oneOf":[{"type":"integer","description":"0 Do not prorate, 1 Prorate and add to next invoice, 2 Prorate and generate standalone invoice.","format":"int32","uniqueKey":"ProrateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"0 Do not prorate, 1 Prorate and add to next invoice, 2 Prorate and generate standalone invoice.","format":"int32","uniqueKey":"ProrateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ProrateTypeId","typeLabel":"integer\u003cint32> | null"},"AutoInvoiceTicketProducts":{"oneOf":[{"type":"boolean","description":"Sweep approved ticket products into the next recurring invoice. Only on an all-locations contract.","uniqueKey":"AutoInvoiceTicketProducts.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Sweep approved ticket products into the next recurring invoice. Only on an all-locations contract.","uniqueKey":"AutoInvoiceTicketProducts.oneOf.1","typeLabel":"null"}],"uniqueKey":"AutoInvoiceTicketProducts","typeLabel":"boolean | null"},"InvoiceTemplateId":{"oneOf":[{"type":"integer","description":"Invoice template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Invoice template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"InvoiceTemplateId","typeLabel":"integer\u003cint64> | null"},"InvoiceEmailTemplateId":{"oneOf":[{"type":"integer","description":"Email template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceEmailTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Email template for the contract's invoices. Send null to clear it; the default then applies.","format":"int64","uniqueKey":"InvoiceEmailTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"InvoiceEmailTemplateId","typeLabel":"integer\u003cint64> | null"},"BrandingThemeId":{"oneOf":[{"type":"string","description":"Accounting-system branding theme for the contract's invoices. Send null to clear it.","format":"uuid","uniqueKey":"BrandingThemeId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"Accounting-system branding theme for the contract's invoices. Send null to clear it.","format":"uuid","uniqueKey":"BrandingThemeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"BrandingThemeId","typeLabel":"string\u003cuuid> | null"},"ServiceLines":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Id","typeLabel":"integer\u003cint64> | null"},"Name":{"oneOf":[{"type":"string","description":"Name of the service line. Required on a new line.","example":"Managed Services","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the service line. Required on a new line.","example":"Managed Services","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].Name","typeLabel":"string | null"},"LaborTermsId":{"oneOf":[{"type":"integer","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LaborTermsId","typeLabel":"integer\u003cint32> | null"},"WorkTypeIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkTypeIds","typeLabel":"integer\u003cint64>[] | null"},"WorkRoleIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.0.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.0","typeLabel":"integer\u003cint64>[]"},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].WorkRoleIds","typeLabel":"integer\u003cint64>[] | null"},"AutoApproveTime":{"oneOf":[{"type":"boolean","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoApproveTime","typeLabel":"boolean | null"},"AutoInvoiceTime":{"oneOf":[{"type":"boolean","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].AutoInvoiceTime","typeLabel":"boolean | null"},"IncludedTimeGoesToId":{"oneOf":[{"type":"integer","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].IncludedTimeGoesToId","typeLabel":"integer\u003cint32> | null"},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].UnlimitedHoursDetails","typeLabel":"object"},"PerHourDetails":{"type":"object","properties":{"RateTypeId":{"oneOf":[{"type":"integer","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.RateTypeId","typeLabel":"integer\u003cint32> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkRoles","typeLabel":"object[] | null"},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64> | null"},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates.WorkTypes","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].PerHourDetails","typeLabel":"object"},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the allocation in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Show the client the hours left in the allocation in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean | null"},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period. Required on a new line.","format":"double","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours included each billing period. Required on a new line.","format":"double","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.AllocatedHours","typeLabel":"number\u003cdouble> | null"},"RateTypeId":{"oneOf":[{"type":"integer","description":"Same as on `PerHourDetails`.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.RateTypeId","typeLabel":"integer\u003cint32> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Same as on `PerHourDetails`.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64> | null"},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles","typeLabel":"object[] | null"},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64> | null"},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble> | null"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false},"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LimitedHoursDetails","typeLabel":"object"},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the block in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Show the client the hours left in the block in the client portal. Default false.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean | null"},"TemplateId":{"oneOf":[{"type":"integer","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.TemplateId","typeLabel":"integer\u003cint64> | null"},"Balance":{"oneOf":[{"type":"number","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Balance","typeLabel":"number\u003cdouble> | null"},"Price":{"oneOf":[{"type":"number","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.Price","typeLabel":"number\u003cdouble> | null"},"WarningThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.WarningThreshold","typeLabel":"integer\u003cint32> | null"},"OverrunThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails.OverrunThreshold","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].BlockHoursDetails","typeLabel":"object"},"LineItems":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Id","typeLabel":"integer\u003cint64> | null"},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].ItemId","typeLabel":"string\u003cuuid> | null"},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Quantity","typeLabel":"number\u003cdouble> | null"},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].Description","typeLabel":"string | null"},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitPrice","typeLabel":"number\u003cdouble> | null"},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].UnitCost","typeLabel":"number\u003cdouble> | null"},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].DiscountPercent","typeLabel":"number\u003cdouble> | null"},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419,"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].TaxId","typeLabel":"integer\u003cint64> | null"},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].BillableStatusId","typeLabel":"integer\u003cint32> | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].StartDate","typeLabel":"string\u003cdate-time> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX].EndDate","typeLabel":"string\u003cdate-time> | null"}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines.oneOf.0.items.[INDEX].LineItems","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"One service line on `POST /v1/contracts` or `PATCH /v1/contracts/{contractId}`. Send\r\nexactly one details object, the one matching `LaborTermsId`; No Labor Terms takes none.","uniqueKey":"ServiceLines.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The service lines, replacing the set: an entry with an Id updates that line, one without adds\r\na line, and a line left out is removed. Leave the field out to keep the lines as they are.","uniqueKey":"ServiceLines.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214},{"type":"null","description":"PATCH only: the service line to keep and update. Leave it out to add a line. Not accepted on\r\nPOST.","format":"int64","example":88214}]},"Name":{"oneOf":[{"type":"string","description":"Name of the service line. Required on a new line.","example":"Managed Services"},{"type":"null","description":"Name of the service line. Required on a new line.","example":"Managed Services"}]},"LaborTermsId":{"oneOf":[{"type":"integer","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1},{"type":"null","description":"How the line bills time: 1 Unlimited Hours, 2 Hourly, 3 Block Hours, 4 No Labor Terms,\r\n5 Limited Hours. Required on a new line. On an existing line only a No Labor Terms line can\r\nchange, once.","format":"int32","example":1}]},"WorkTypeIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line."},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The work types the line covers. Left out on a new line, every work type is covered, as in the\r\napp. Not accepted on a No Labor Terms line."}]},"WorkRoleIds":{"oneOf":[{"type":"array","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`."},{"type":"null","items":{"type":"integer","format":"int64"},"description":"The billing roles the line covers. Same rules as `WorkTypeIds`."}]},"AutoApproveTime":{"oneOf":[{"type":"boolean","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false."},{"type":"null","description":"Approve time logged against the line automatically. Every labor term except No Labor Terms. Default false."}]},"AutoInvoiceTime":{"oneOf":[{"type":"boolean","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false."},{"type":"null","description":"Sweep approved time waiting on the line into the contract's recurring invoice. Every labor term\r\nexcept No Labor Terms. Default false."}]},"IncludedTimeGoesToId":{"oneOf":[{"type":"integer","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1},{"type":"null","description":"Where covered time lands when it is approved: 1 Complete (default) or 2 Waiting to invoice.\r\nUnlimited, Block and Limited Hours only.","format":"int32","example":1}]},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false},"PerHourDetails":{"type":"object","properties":{"RateTypeId":{"oneOf":[{"type":"integer","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2},{"type":"null","description":"1 Use default labor rates, 2 Use fixed labor rate, 3 Custom labor rates. Default 1.","format":"int32","example":2}]},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150},{"type":"null","description":"The flat rate per hour. Required with RateTypeId 2, refused with any other.","format":"double","example":150}]},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}}]},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}}]}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows."}},"additionalProperties":false},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the allocation in the client portal. Default false."},{"type":"null","description":"Show the client the hours left in the allocation in the client portal. Default false."}]},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period. Required on a new line.","format":"double","example":10},{"type":"null","description":"Hours included each billing period. Required on a new line.","format":"double","example":10}]},"RateTypeId":{"oneOf":[{"type":"integer","description":"Same as on `PerHourDetails`.","format":"int32"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"int32"}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Same as on `PerHourDetails`.","format":"double"},{"type":"null","description":"Same as on `PerHourDetails`.","format":"double"}]},"CustomRates":{"type":"object","properties":{"WorkRoles":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkRoleId":{"oneOf":[{"type":"integer","description":"The billing role this row prices. Required.","format":"int64","example":12},{"type":"null","description":"The billing role this row prices. Required.","format":"int64","example":12}]},"HourlyRate":{"oneOf":[{"type":"number","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95},{"type":"null","description":"Rate per hour. Left out, the current rate is kept.","format":"double","example":95}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"270"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"270"}]}},"additionalProperties":false}}]},"WorkTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}},{"type":"null","items":{"type":"object","properties":{"WorkTypeId":{"oneOf":[{"type":"integer","description":"The work type this row prices. Required.","format":"int64","example":176},{"type":"null","description":"The work type this row prices. Required.","format":"int64","example":176}]},"HourlyMultiplier":{"oneOf":[{"type":"number","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5},{"type":"null","description":"Multiplier on the role's rate. Left out, the current multiplier is kept.","format":"double","example":1.5}]},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code. Left out, the current code is kept.","example":"200"},{"type":"null","description":"Accounting code. Left out, the current code is kept.","example":"200"}]}},"additionalProperties":false}}]}},"additionalProperties":false,"description":"Overrides for the Custom labor rates grid. The line starts from every billing role and work type\r\nat the service provider's own rates; only the rows sent here change. On PATCH, entries merge by\r\nid into the line's existing rows."}},"additionalProperties":false},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"oneOf":[{"type":"boolean","description":"Show the client the hours left in the block in the client portal. Default false."},{"type":"null","description":"Show the client the hours left in the block in the client portal. Default false."}]},"TemplateId":{"oneOf":[{"type":"integer","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0},{"type":"null","description":"A Block Hours Template id, or 0 for Custom. With a template, Balance and Price come from it and\r\nare refused on the request, as the app disables both once a template is picked. Required on a\r\nnew line.","format":"int64","example":0}]},"Balance":{"oneOf":[{"type":"number","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20},{"type":"null","description":"Hours in the block. Custom (TemplateId 0) only, and then required on a new line.","format":"double","example":20}]},"Price":{"oneOf":[{"type":"number","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000},{"type":"null","description":"The price of the block, billed once on the Draft invoice the new line raises. Custom\r\n(TemplateId 0) only, and then required on a new line.","format":"double","example":2000}]},"WarningThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20},{"type":"null","description":"Percentage of the block left that raises a low-balance warning, a whole number 0-90.","format":"int32","example":20}]},"OverrunThreshold":{"oneOf":[{"type":"integer","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10},{"type":"null","description":"Percentage of the block the client may run past zero, a whole number 0-50.","format":"int32","example":10}]}},"additionalProperties":false},"LineItems":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are."},{"type":"null","items":{"type":"object","properties":{"Id":{"oneOf":[{"type":"integer","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204},{"type":"null","description":"PATCH only: the existing line item to keep and update. Leave it out to add one.","format":"int64","example":991204}]},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"},{"type":"null","description":"The catalog item to bill. Required on a new entry, not accepted on an existing one.","format":"uuid"}]},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12},{"type":"null","description":"Quantity billed each period. Required on a new entry. Greater than 0.","format":"double","example":12}]},"Description":{"oneOf":[{"type":"string","description":"Description on the invoice. Defaults to the item's. Send null to clear it."},{"type":"null","description":"Description on the invoice. Defaults to the item's. Send null to clear it."}]},"UnitPrice":{"oneOf":[{"type":"number","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2},{"type":"null","description":"Unit price charged. Defaults to the item's price. Not negative.","format":"double","example":24.2}]},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4},{"type":"null","description":"Unit cost. Defaults to the item's cost. Not negative.","format":"double","example":18.4}]},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage, 0-100. Default 0.","format":"double"},{"type":"null","description":"Discount percentage, 0-100. Default 0.","format":"double"}]},"TaxId":{"oneOf":[{"type":"integer","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419},{"type":"null","description":"Tax applied. Null, or left out on a new line item, gives the tax the app would pick for the item; left out on an existing one, its tax is kept. To bill no tax, send the tax-exempt rate's id.","format":"int64","example":2419}]},"BillableStatusId":{"oneOf":[{"type":"integer","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"},{"type":"null","description":"1 Billable (default), 2 No charge, 3 Non-billable. A line that isn't Billable bills 0.","format":"int32"}]},"StartDate":{"oneOf":[{"type":"string","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"},{"type":"null","description":"Date the line starts billing, a calendar date. Defaults to today in the service provider's zone,\r\nor the contract's start date if that is later.","format":"date-time"}]},"EndDate":{"oneOf":[{"type":"string","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"},{"type":"null","description":"Date the line stops billing, a calendar date. Send null to make it open-ended.","format":"date-time"}]}},"additionalProperties":false,"description":"One product or bundle billed on a service line. A new entry needs ItemId and Quantity; the rest\r\nfalls back to the item's own values, as an invoice line does. Amount and TaxAmount are always\r\ncalculated."},"description":"The products and bundles billed on the line. On PATCH the list replaces the set, matched by\r\n`Id`; leave it out to keep the line items as they are."}]}},"additionalProperties":false,"description":"One service line on `POST /v1/contracts` or `PATCH /v1/contracts/{contractId}`. Send\r\nexactly one details object, the one matching `LaborTermsId`; No Labor Terms takes none."},"description":"The service lines, replacing the set: an entry with an Id updates that line, one without adds\r\na line, and a line left out is removed. Leave the field out to keep the lines as they are.","uniqueKey":"ServiceLines.oneOf.1","typeLabel":"null"}],"uniqueKey":"ServiceLines","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Partial update of a contract. Every field is optional and a field left out keeps its value; a\r\nclearable field clears with `null`. `ServiceLines`, and each line's `LineItems`,\r\nreplace their set, matched by `Id`.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"Name":"\u003cstring>","ClientId":123,"StatusId":3,"Reference":"\u003cstring>","StartDate":"2023-11-07T05:31:56Z","EndDate":"2023-11-07T05:31:56Z","RepeatPeriodId":123,"DaysBeforeInvoiceCreation":123,"DaysUntilDue":123,"AutoApproveAndSend":true,"ContactIds":[123],"IsForAllLocations":true,"LocationIds":[123],"ProrateTypeId":123,"AutoInvoiceTicketProducts":true,"InvoiceTemplateId":123,"InvoiceEmailTemplateId":123,"BrandingThemeId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","ServiceLines":[{"Id":88214,"Name":"Managed Services","LaborTermsId":1,"WorkTypeIds":[123],"WorkRoleIds":[123],"AutoApproveTime":true,"AutoInvoiceTime":true,"IncludedTimeGoesToId":1,"UnlimitedHoursDetails":{},"PerHourDetails":{"RateTypeId":2,"HourlyRate":150,"CustomRates":{"WorkRoles":[{"WorkRoleId":12,"HourlyRate":95,"CoaCode":"270"}],"WorkTypes":[{"WorkTypeId":176,"HourlyMultiplier":1.5,"CoaCode":"200"}]}},"LimitedHoursDetails":{"ShowRemainingHoursInClientPortal":true,"AllocatedHours":10,"RateTypeId":123,"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":12,"HourlyRate":95,"CoaCode":"270"}],"WorkTypes":[{"WorkTypeId":176,"HourlyMultiplier":1.5,"CoaCode":"200"}]}},"BlockHoursDetails":{"ShowRemainingHoursInClientPortal":true,"TemplateId":0,"Balance":20,"Price":2000,"WarningThreshold":20,"OverrunThreshold":10},"LineItems":[{"Id":991204,"ItemId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","Quantity":12,"Description":"\u003cstring>","UnitPrice":24.2,"UnitCost":18.4,"DiscountPercent":123,"TaxId":2419,"BillableStatusId":123,"StartDate":"2023-11-07T05:31:56Z","EndDate":"2023-11-07T05:31:56Z"}]}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"44fdf2bf-95f4-4912-a4a5-04f039f703b7":{"description":"OK","content":{"text/plain":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of the contract.","format":"int64","example":4021,"uniqueKey":"Data.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Name of the contract.","example":"All Labor Terms Example","uniqueKey":"Data.Name","typeLabel":"string"},"Status":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Status.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Status.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Status","typeLabel":"object"},"Client":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Client.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Client.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Client","typeLabel":"object"},"LocationIds":{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"Data.LocationIds.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The client locations the contract is scoped to, as location ids. Empty\r\nwhen the contract covers every one of the client's locations (see\r\n`IsForAllLocations`) as well as when a location-scoped contract's rows have all\r\nbeen removed; never null.","uniqueKey":"Data.LocationIds","typeLabel":"integer\u003cint64>[]"},"IsForAllLocations":{"type":"boolean","description":"Whether the contract covers every one of the client's locations rather than the specific\r\nones named in `LocationIds`. When true, `LocationIds` is empty by\r\ndefinition.","uniqueKey":"Data.IsForAllLocations","typeLabel":"boolean"},"CreatedOn":{"oneOf":[{"type":"string","description":"When the contract was created, in UTC.","format":"date-time","uniqueKey":"Data.CreatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the contract was created, in UTC.","format":"date-time","uniqueKey":"Data.CreatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.CreatedOn","typeLabel":"string\u003cdate-time> | null"},"UpdatedOn":{"oneOf":[{"type":"string","description":"When the contract was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.UpdatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the contract was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.UpdatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.UpdatedOn","typeLabel":"string\u003cdate-time> | null"},"Reference":{"oneOf":[{"type":"string","description":"The contract's invoice reference, free text. Null when it is not set.","example":"MSA-2025-014","uniqueKey":"Data.Reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"The contract's invoice reference, free text. Null when it is not set.","example":"MSA-2025-014","uniqueKey":"Data.Reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.Reference","typeLabel":"string | null"},"StartDate":{"type":"string","description":"Date the contract's coverage starts, a calendar date.","format":"date","uniqueKey":"Data.StartDate","typeLabel":"string\u003cdate>"},"EndDate":{"oneOf":[{"type":"string","description":"Date the contract's coverage ends, a calendar date, or null when it is open-ended.","format":"date","uniqueKey":"Data.EndDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date the contract's coverage ends, a calendar date, or null when it is open-ended.","format":"date","uniqueKey":"Data.EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.EndDate","typeLabel":"string\u003cdate> | null"},"RepeatPeriod":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.RepeatPeriod.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.RepeatPeriod.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.RepeatPeriod","typeLabel":"object"},"DaysBeforeInvoiceCreation":{"oneOf":[{"type":"integer","description":"How many days before the billing period ends the invoice is generated.","format":"int32","uniqueKey":"Data.DaysBeforeInvoiceCreation.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"How many days before the billing period ends the invoice is generated.","format":"int32","uniqueKey":"Data.DaysBeforeInvoiceCreation.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.DaysBeforeInvoiceCreation","typeLabel":"integer\u003cint32> | null"},"DaysUntilDue":{"type":"integer","description":"How many days the client has to pay once invoiced. Renamed from `InvoiceDue` (ENG-7288).","format":"int32","example":30,"uniqueKey":"Data.DaysUntilDue","typeLabel":"integer\u003cint32>"},"ProrateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ProrateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ProrateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ProrateType","typeLabel":"object"},"AutoInvoiceTicketProducts":{"type":"boolean","description":"Whether approved ticket products for this client are swept into the contract's next\r\nrecurring invoice. Only ever true on a contract that covers all the client's locations.","uniqueKey":"Data.AutoInvoiceTicketProducts","typeLabel":"boolean"},"InvoiceTemplateId":{"oneOf":[{"type":"integer","description":"Invoice template invoices raised from this contract use. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Invoice template invoices raised from this contract use. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.InvoiceTemplateId","typeLabel":"integer\u003cint64> | null"},"InvoiceEmailTemplateId":{"oneOf":[{"type":"integer","description":"Email template invoices raised from this contract are sent with. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceEmailTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Email template invoices raised from this contract are sent with. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceEmailTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.InvoiceEmailTemplateId","typeLabel":"integer\u003cint64> | null"},"BrandingThemeId":{"oneOf":[{"type":"string","description":"Accounting-system branding theme invoices raised from this contract use. Null means the default.","format":"uuid","uniqueKey":"Data.BrandingThemeId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"Accounting-system branding theme invoices raised from this contract use. Null means the default.","format":"uuid","uniqueKey":"Data.BrandingThemeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.BrandingThemeId","typeLabel":"string\u003cuuid> | null"},"AutoApproveAndSend":{"oneOf":[{"type":"boolean","description":"Whether an invoice raised from this contract is approved and sent automatically.","uniqueKey":"Data.AutoApproveAndSend.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether an invoice raised from this contract is approved and sent automatically.","uniqueKey":"Data.AutoApproveAndSend.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.AutoApproveAndSend","typeLabel":"boolean | null"},"Contacts":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Contacts.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Contacts.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Contacts.items.[INDEX]","typeLabel":"object"},"description":"The contacts who can auto-approve invoices on this contract. Empty when none are set.","uniqueKey":"Data.Contacts","typeLabel":"object[]"},"RecurringAmount":{"type":"number","description":"Total recurring amount the contract bills each period, before tax.","format":"double","example":6870,"uniqueKey":"Data.RecurringAmount","typeLabel":"number\u003cdouble>"},"RecurringCost":{"type":"number","description":"Total recurring cost of the contract's recurring products each period.","format":"double","example":2981.36,"uniqueKey":"Data.RecurringCost","typeLabel":"number\u003cdouble>"},"ServiceLines":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of the service line. The same value a time entry's ServiceLineId carries.","format":"int64","example":88214,"uniqueKey":"Data.ServiceLines.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Name of the service line.","uniqueKey":"Data.ServiceLines.items.[INDEX].Name","typeLabel":"string"},"CreatedOn":{"oneOf":[{"type":"string","description":"When the service line was created, in UTC.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the service line was created, in UTC.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn","typeLabel":"string\u003cdate-time> | null"},"UpdatedOn":{"oneOf":[{"type":"string","description":"When the service line was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the service line was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn","typeLabel":"string\u003cdate-time> | null"},"LaborTerms":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms","typeLabel":"object"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The work types this line applies to. Only recorded for an Unlimited Hours line; empty for\r\nevery other `LaborTerms` today, since the other labor terms carry no work-type\r\nselection of their own in storage.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes","typeLabel":"object[]"},"WorkRoles":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"Same coverage as `WorkTypes`, for billing roles.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles","typeLabel":"object[]"},"AutoApproveTime":{"type":"boolean","description":"Whether time logged against this line is approved automatically. False on a No Labor Terms line.","uniqueKey":"Data.ServiceLines.items.[INDEX].AutoApproveTime","typeLabel":"boolean"},"AutoInvoiceTime":{"type":"boolean","description":"The app's \"Auto Invoice Time\": approved time waiting on this line is swept into the\r\ncontract's recurring invoice. False on a No Labor Terms line.","uniqueKey":"Data.ServiceLines.items.[INDEX].AutoInvoiceTime","typeLabel":"boolean"},"IncludedTimeGoesTo":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo","typeLabel":"object"},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false,"description":"Nothing is specific to an Unlimited Hours line today. `AutoApprove` moved to the service\r\nline as `AutoApproveTime` (ENG-7288).","uniqueKey":"Data.ServiceLines.items.[INDEX].UnlimitedHoursDetails","typeLabel":"object"},"PerHourDetails":{"type":"object","properties":{"RateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType","typeLabel":"object"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"type":"integer","description":"The billing role.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64>"},"HourlyRate":{"type":"number","description":"Rate charged per hour for this role on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"The rate per billing role.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles","typeLabel":"object[]"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"type":"integer","description":"The work type.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64>"},"HourlyMultiplier":{"type":"number","description":"Multiplier applied to the role's rate for this work type on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The multiplier per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes","typeLabel":"object[]"}},"additionalProperties":false,"description":"The Custom labor rates grid of a Per Hour or Limited Hours line: one row per billing role and per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails","typeLabel":"object"},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"type":"boolean","description":"Whether the client portal shows the client the hours left in the allocation.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean"},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours included each billing period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours","typeLabel":"number\u003cdouble> | null"},"RateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType","typeLabel":"object"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"type":"integer","description":"The billing role.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64>"},"HourlyRate":{"type":"number","description":"Rate charged per hour for this role on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"The rate per billing role.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles","typeLabel":"object[]"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"type":"integer","description":"The work type.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64>"},"HourlyMultiplier":{"type":"number","description":"Multiplier applied to the role's rate for this work type on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The multiplier per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes","typeLabel":"object[]"}},"additionalProperties":false,"description":"The Custom labor rates grid of a Per Hour or Limited Hours line: one row per billing role and per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails","typeLabel":"object"},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"type":"boolean","description":"Whether the client portal shows the client the hours left in the block.","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean"},"TemplateId":{"type":"integer","description":"The Block Hours Template the block was created from. 0 means Custom: no template applies.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.TemplateId","typeLabel":"integer\u003cint64>"},"Balance":{"oneOf":[{"type":"number","description":"The block's total balance, in hours.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The block's total balance, in hours.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance","typeLabel":"number\u003cdouble> | null"},"WarningThreshold":{"oneOf":[{"type":"number","description":"Percentage of the block left at which a low-balance warning is raised, a whole number from\r\n0 to 90. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage of the block left at which a low-balance warning is raised, a whole number from\r\n0 to 90. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold","typeLabel":"number\u003cdouble> | null"},"OverrunThreshold":{"oneOf":[{"type":"number","description":"Percentage of the block the client may run past zero before the block counts as overrun, a\r\nwhole number from 0 to 50. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage of the block the client may run past zero before the block counts as overrun, a\r\nwhole number from 0 to 50. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails","typeLabel":"object"},"RecurringAmount":{"type":"number","description":"Recurring amount this service line bills each period, before tax.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].RecurringAmount","typeLabel":"number\u003cdouble>"},"RecurringCost":{"type":"number","description":"Recurring cost of this service line's recurring products each period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].RecurringCost","typeLabel":"number\u003cdouble>"},"LineItems":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of this line.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item this line bills, resolving against `GET /v1/items`. Null for a line\r\nthat does not reference a catalog item.","format":"uuid","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"The catalog item this line bills, resolving against `GET /v1/items`. Null for a line\r\nthat does not reference a catalog item.","format":"uuid","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId","typeLabel":"string\u003cuuid> | null"},"ItemType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType","typeLabel":"object"},"Name":{"type":"string","description":"Name of the line as billed.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Name","typeLabel":"string"},"Description":{"oneOf":[{"type":"string","description":"Description of the line as billed, if any.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description of the line as billed, if any.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description","typeLabel":"string | null"},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Quantity billed.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity","typeLabel":"number\u003cdouble> | null"},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost of the line. Renamed from `Cost` (ENG-7288), the name items and invoice lines use.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit cost of the line. Renamed from `Cost` (ENG-7288), the name items and invoice lines use.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost","typeLabel":"number\u003cdouble> | null"},"UnitPrice":{"type":"number","description":"Unit price charged.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitPrice","typeLabel":"number\u003cdouble>"},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage applied to this line, 0-100.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Discount percentage applied to this line, 0-100.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent","typeLabel":"number\u003cdouble> | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date this line's coverage starts, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date this line's coverage starts, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate","typeLabel":"string\u003cdate> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date this line's coverage ends, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date this line's coverage ends, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate","typeLabel":"string\u003cdate> | null"},"Tax":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax","typeLabel":"object"},"Amount":{"type":"number","description":"Line total after discount, before tax.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Amount","typeLabel":"number\u003cdouble>"},"TaxAmount":{"oneOf":[{"type":"number","description":"Tax on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Tax on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount","typeLabel":"number\u003cdouble> | null"},"BillableStatus":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus","typeLabel":"object"}},"additionalProperties":false,"description":"One product, bundle or labor charge billed on a contract's service line.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX]","typeLabel":"object"},"description":"The actual products/labor billed on this line. Empty array when nothing is billed on it\r\nyet; never null.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems","typeLabel":"object[]"}},"additionalProperties":false,"description":"One service line inside a contract, with the products/labor billed on it.","uniqueKey":"Data.ServiceLines.items.[INDEX]","typeLabel":"object"},"description":"The contract's service lines. Empty when the contract has none; never null.","uniqueKey":"Data.ServiceLines","typeLabel":"object[]"}},"additionalProperties":false,"description":"Everything about one contract: the client and locations it covers, its billing schedule, and\r\neach service line with the actual products/labor billed on it.","uniqueKey":"Data","typeLabel":"object"},"DataContext":{"oneOf":[{"type":"object","additionalProperties":false,"example":null,"uniqueKey":"DataContext.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"example":null,"uniqueKey":"DataContext.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext","typeLabel":"object | null"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":{"Id":4021,"Name":"All Labor Terms Example","Status":{"Id":1,"Name":"\u003cstring>"},"Client":{"Id":1,"Name":"\u003cstring>"},"LocationIds":[123],"IsForAllLocations":true,"CreatedOn":"2023-11-07T05:31:56Z","UpdatedOn":"2023-11-07T05:31:56Z","Reference":"MSA-2025-014","StartDate":"2023-12-25","EndDate":"2023-12-25","RepeatPeriod":{"Id":1,"Name":"\u003cstring>"},"DaysBeforeInvoiceCreation":123,"DaysUntilDue":30,"ProrateType":{"Id":1,"Name":"\u003cstring>"},"AutoInvoiceTicketProducts":true,"InvoiceTemplateId":123,"InvoiceEmailTemplateId":123,"BrandingThemeId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","AutoApproveAndSend":true,"Contacts":[{"Id":1,"Name":"\u003cstring>"}],"RecurringAmount":6870,"RecurringCost":2981.36,"ServiceLines":[{"Id":88214,"Name":"\u003cstring>","CreatedOn":"2023-11-07T05:31:56Z","UpdatedOn":"2023-11-07T05:31:56Z","LaborTerms":{"Id":1,"Name":"\u003cstring>"},"WorkTypes":[{"Id":1,"Name":"\u003cstring>"}],"WorkRoles":[{"Id":1,"Name":"\u003cstring>"}],"AutoApproveTime":true,"AutoInvoiceTime":true,"IncludedTimeGoesTo":{"Id":1,"Name":"\u003cstring>"},"UnlimitedHoursDetails":{},"PerHourDetails":{"RateType":{"Id":1,"Name":"\u003cstring>"},"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":123,"HourlyRate":123,"CoaCode":"\u003cstring>"}],"WorkTypes":[{"WorkTypeId":123,"HourlyMultiplier":123,"CoaCode":"\u003cstring>"}]}},"LimitedHoursDetails":{"ShowRemainingHoursInClientPortal":true,"AllocatedHours":123,"RateType":{"Id":1,"Name":"\u003cstring>"},"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":123,"HourlyRate":123,"CoaCode":"\u003cstring>"}],"WorkTypes":[{"WorkTypeId":123,"HourlyMultiplier":123,"CoaCode":"\u003cstring>"}]}},"BlockHoursDetails":{"ShowRemainingHoursInClientPortal":true,"TemplateId":123,"Balance":123,"WarningThreshold":123,"OverrunThreshold":123},"RecurringAmount":123,"RecurringCost":123,"LineItems":[{"Id":123,"ItemId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","ItemType":{"Id":1,"Name":"\u003cstring>"},"Name":"\u003cstring>","Description":"\u003cstring>","Quantity":123,"UnitCost":123,"UnitPrice":123,"DiscountPercent":123,"StartDate":"2023-12-25","EndDate":"2023-12-25","Tax":{"Id":1,"Name":"\u003cstring>"},"Amount":123,"TaxAmount":123,"BillableStatus":{"Id":1,"Name":"\u003cstring>"}}]}]},"DataContext":null,"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of the contract.","format":"int64","example":4021,"uniqueKey":"Data.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Name of the contract.","example":"All Labor Terms Example","uniqueKey":"Data.Name","typeLabel":"string"},"Status":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Status.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Status.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Status","typeLabel":"object"},"Client":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Client.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Client.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Client","typeLabel":"object"},"LocationIds":{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"Data.LocationIds.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The client locations the contract is scoped to, as location ids. Empty\r\nwhen the contract covers every one of the client's locations (see\r\n`IsForAllLocations`) as well as when a location-scoped contract's rows have all\r\nbeen removed; never null.","uniqueKey":"Data.LocationIds","typeLabel":"integer\u003cint64>[]"},"IsForAllLocations":{"type":"boolean","description":"Whether the contract covers every one of the client's locations rather than the specific\r\nones named in `LocationIds`. When true, `LocationIds` is empty by\r\ndefinition.","uniqueKey":"Data.IsForAllLocations","typeLabel":"boolean"},"CreatedOn":{"oneOf":[{"type":"string","description":"When the contract was created, in UTC.","format":"date-time","uniqueKey":"Data.CreatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the contract was created, in UTC.","format":"date-time","uniqueKey":"Data.CreatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.CreatedOn","typeLabel":"string\u003cdate-time> | null"},"UpdatedOn":{"oneOf":[{"type":"string","description":"When the contract was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.UpdatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the contract was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.UpdatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.UpdatedOn","typeLabel":"string\u003cdate-time> | null"},"Reference":{"oneOf":[{"type":"string","description":"The contract's invoice reference, free text. Null when it is not set.","example":"MSA-2025-014","uniqueKey":"Data.Reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"The contract's invoice reference, free text. Null when it is not set.","example":"MSA-2025-014","uniqueKey":"Data.Reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.Reference","typeLabel":"string | null"},"StartDate":{"type":"string","description":"Date the contract's coverage starts, a calendar date.","format":"date","uniqueKey":"Data.StartDate","typeLabel":"string\u003cdate>"},"EndDate":{"oneOf":[{"type":"string","description":"Date the contract's coverage ends, a calendar date, or null when it is open-ended.","format":"date","uniqueKey":"Data.EndDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date the contract's coverage ends, a calendar date, or null when it is open-ended.","format":"date","uniqueKey":"Data.EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.EndDate","typeLabel":"string\u003cdate> | null"},"RepeatPeriod":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.RepeatPeriod.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.RepeatPeriod.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.RepeatPeriod","typeLabel":"object"},"DaysBeforeInvoiceCreation":{"oneOf":[{"type":"integer","description":"How many days before the billing period ends the invoice is generated.","format":"int32","uniqueKey":"Data.DaysBeforeInvoiceCreation.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"How many days before the billing period ends the invoice is generated.","format":"int32","uniqueKey":"Data.DaysBeforeInvoiceCreation.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.DaysBeforeInvoiceCreation","typeLabel":"integer\u003cint32> | null"},"DaysUntilDue":{"type":"integer","description":"How many days the client has to pay once invoiced. Renamed from `InvoiceDue` (ENG-7288).","format":"int32","example":30,"uniqueKey":"Data.DaysUntilDue","typeLabel":"integer\u003cint32>"},"ProrateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ProrateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ProrateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ProrateType","typeLabel":"object"},"AutoInvoiceTicketProducts":{"type":"boolean","description":"Whether approved ticket products for this client are swept into the contract's next\r\nrecurring invoice. Only ever true on a contract that covers all the client's locations.","uniqueKey":"Data.AutoInvoiceTicketProducts","typeLabel":"boolean"},"InvoiceTemplateId":{"oneOf":[{"type":"integer","description":"Invoice template invoices raised from this contract use. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Invoice template invoices raised from this contract use. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.InvoiceTemplateId","typeLabel":"integer\u003cint64> | null"},"InvoiceEmailTemplateId":{"oneOf":[{"type":"integer","description":"Email template invoices raised from this contract are sent with. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceEmailTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Email template invoices raised from this contract are sent with. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceEmailTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.InvoiceEmailTemplateId","typeLabel":"integer\u003cint64> | null"},"BrandingThemeId":{"oneOf":[{"type":"string","description":"Accounting-system branding theme invoices raised from this contract use. Null means the default.","format":"uuid","uniqueKey":"Data.BrandingThemeId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"Accounting-system branding theme invoices raised from this contract use. Null means the default.","format":"uuid","uniqueKey":"Data.BrandingThemeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.BrandingThemeId","typeLabel":"string\u003cuuid> | null"},"AutoApproveAndSend":{"oneOf":[{"type":"boolean","description":"Whether an invoice raised from this contract is approved and sent automatically.","uniqueKey":"Data.AutoApproveAndSend.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether an invoice raised from this contract is approved and sent automatically.","uniqueKey":"Data.AutoApproveAndSend.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.AutoApproveAndSend","typeLabel":"boolean | null"},"Contacts":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Contacts.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Contacts.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Contacts.items.[INDEX]","typeLabel":"object"},"description":"The contacts who can auto-approve invoices on this contract. Empty when none are set.","uniqueKey":"Data.Contacts","typeLabel":"object[]"},"RecurringAmount":{"type":"number","description":"Total recurring amount the contract bills each period, before tax.","format":"double","example":6870,"uniqueKey":"Data.RecurringAmount","typeLabel":"number\u003cdouble>"},"RecurringCost":{"type":"number","description":"Total recurring cost of the contract's recurring products each period.","format":"double","example":2981.36,"uniqueKey":"Data.RecurringCost","typeLabel":"number\u003cdouble>"},"ServiceLines":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of the service line. The same value a time entry's ServiceLineId carries.","format":"int64","example":88214,"uniqueKey":"Data.ServiceLines.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Name of the service line.","uniqueKey":"Data.ServiceLines.items.[INDEX].Name","typeLabel":"string"},"CreatedOn":{"oneOf":[{"type":"string","description":"When the service line was created, in UTC.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the service line was created, in UTC.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn","typeLabel":"string\u003cdate-time> | null"},"UpdatedOn":{"oneOf":[{"type":"string","description":"When the service line was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the service line was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn","typeLabel":"string\u003cdate-time> | null"},"LaborTerms":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms","typeLabel":"object"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The work types this line applies to. Only recorded for an Unlimited Hours line; empty for\r\nevery other `LaborTerms` today, since the other labor terms carry no work-type\r\nselection of their own in storage.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes","typeLabel":"object[]"},"WorkRoles":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"Same coverage as `WorkTypes`, for billing roles.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles","typeLabel":"object[]"},"AutoApproveTime":{"type":"boolean","description":"Whether time logged against this line is approved automatically. False on a No Labor Terms line.","uniqueKey":"Data.ServiceLines.items.[INDEX].AutoApproveTime","typeLabel":"boolean"},"AutoInvoiceTime":{"type":"boolean","description":"The app's \"Auto Invoice Time\": approved time waiting on this line is swept into the\r\ncontract's recurring invoice. False on a No Labor Terms line.","uniqueKey":"Data.ServiceLines.items.[INDEX].AutoInvoiceTime","typeLabel":"boolean"},"IncludedTimeGoesTo":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo","typeLabel":"object"},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false,"description":"Nothing is specific to an Unlimited Hours line today. `AutoApprove` moved to the service\r\nline as `AutoApproveTime` (ENG-7288).","uniqueKey":"Data.ServiceLines.items.[INDEX].UnlimitedHoursDetails","typeLabel":"object"},"PerHourDetails":{"type":"object","properties":{"RateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType","typeLabel":"object"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"type":"integer","description":"The billing role.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64>"},"HourlyRate":{"type":"number","description":"Rate charged per hour for this role on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"The rate per billing role.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles","typeLabel":"object[]"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"type":"integer","description":"The work type.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64>"},"HourlyMultiplier":{"type":"number","description":"Multiplier applied to the role's rate for this work type on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The multiplier per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes","typeLabel":"object[]"}},"additionalProperties":false,"description":"The Custom labor rates grid of a Per Hour or Limited Hours line: one row per billing role and per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails","typeLabel":"object"},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"type":"boolean","description":"Whether the client portal shows the client the hours left in the allocation.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean"},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours included each billing period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours","typeLabel":"number\u003cdouble> | null"},"RateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType","typeLabel":"object"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"type":"integer","description":"The billing role.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64>"},"HourlyRate":{"type":"number","description":"Rate charged per hour for this role on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"The rate per billing role.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles","typeLabel":"object[]"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"type":"integer","description":"The work type.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64>"},"HourlyMultiplier":{"type":"number","description":"Multiplier applied to the role's rate for this work type on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The multiplier per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes","typeLabel":"object[]"}},"additionalProperties":false,"description":"The Custom labor rates grid of a Per Hour or Limited Hours line: one row per billing role and per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails","typeLabel":"object"},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"type":"boolean","description":"Whether the client portal shows the client the hours left in the block.","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean"},"TemplateId":{"type":"integer","description":"The Block Hours Template the block was created from. 0 means Custom: no template applies.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.TemplateId","typeLabel":"integer\u003cint64>"},"Balance":{"oneOf":[{"type":"number","description":"The block's total balance, in hours.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The block's total balance, in hours.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance","typeLabel":"number\u003cdouble> | null"},"WarningThreshold":{"oneOf":[{"type":"number","description":"Percentage of the block left at which a low-balance warning is raised, a whole number from\r\n0 to 90. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage of the block left at which a low-balance warning is raised, a whole number from\r\n0 to 90. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold","typeLabel":"number\u003cdouble> | null"},"OverrunThreshold":{"oneOf":[{"type":"number","description":"Percentage of the block the client may run past zero before the block counts as overrun, a\r\nwhole number from 0 to 50. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage of the block the client may run past zero before the block counts as overrun, a\r\nwhole number from 0 to 50. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails","typeLabel":"object"},"RecurringAmount":{"type":"number","description":"Recurring amount this service line bills each period, before tax.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].RecurringAmount","typeLabel":"number\u003cdouble>"},"RecurringCost":{"type":"number","description":"Recurring cost of this service line's recurring products each period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].RecurringCost","typeLabel":"number\u003cdouble>"},"LineItems":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of this line.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item this line bills, resolving against `GET /v1/items`. Null for a line\r\nthat does not reference a catalog item.","format":"uuid","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"The catalog item this line bills, resolving against `GET /v1/items`. Null for a line\r\nthat does not reference a catalog item.","format":"uuid","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId","typeLabel":"string\u003cuuid> | null"},"ItemType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType","typeLabel":"object"},"Name":{"type":"string","description":"Name of the line as billed.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Name","typeLabel":"string"},"Description":{"oneOf":[{"type":"string","description":"Description of the line as billed, if any.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description of the line as billed, if any.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description","typeLabel":"string | null"},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Quantity billed.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity","typeLabel":"number\u003cdouble> | null"},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost of the line. Renamed from `Cost` (ENG-7288), the name items and invoice lines use.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit cost of the line. Renamed from `Cost` (ENG-7288), the name items and invoice lines use.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost","typeLabel":"number\u003cdouble> | null"},"UnitPrice":{"type":"number","description":"Unit price charged.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitPrice","typeLabel":"number\u003cdouble>"},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage applied to this line, 0-100.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Discount percentage applied to this line, 0-100.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent","typeLabel":"number\u003cdouble> | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date this line's coverage starts, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date this line's coverage starts, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate","typeLabel":"string\u003cdate> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date this line's coverage ends, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date this line's coverage ends, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate","typeLabel":"string\u003cdate> | null"},"Tax":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax","typeLabel":"object"},"Amount":{"type":"number","description":"Line total after discount, before tax.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Amount","typeLabel":"number\u003cdouble>"},"TaxAmount":{"oneOf":[{"type":"number","description":"Tax on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Tax on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount","typeLabel":"number\u003cdouble> | null"},"BillableStatus":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus","typeLabel":"object"}},"additionalProperties":false,"description":"One product, bundle or labor charge billed on a contract's service line.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX]","typeLabel":"object"},"description":"The actual products/labor billed on this line. Empty array when nothing is billed on it\r\nyet; never null.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems","typeLabel":"object[]"}},"additionalProperties":false,"description":"One service line inside a contract, with the products/labor billed on it.","uniqueKey":"Data.ServiceLines.items.[INDEX]","typeLabel":"object"},"description":"The contract's service lines. Empty when the contract has none; never null.","uniqueKey":"Data.ServiceLines","typeLabel":"object[]"}},"additionalProperties":false,"description":"Everything about one contract: the client and locations it covers, its billing schedule, and\r\neach service line with the actual products/labor billed on it.","uniqueKey":"Data","typeLabel":"object"},"DataContext":{"oneOf":[{"type":"object","additionalProperties":false,"example":null,"uniqueKey":"DataContext.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"example":null,"uniqueKey":"DataContext.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext","typeLabel":"object | null"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":{"Id":4021,"Name":"All Labor Terms Example","Status":{"Id":1,"Name":"\u003cstring>"},"Client":{"Id":1,"Name":"\u003cstring>"},"LocationIds":[123],"IsForAllLocations":true,"CreatedOn":"2023-11-07T05:31:56Z","UpdatedOn":"2023-11-07T05:31:56Z","Reference":"MSA-2025-014","StartDate":"2023-12-25","EndDate":"2023-12-25","RepeatPeriod":{"Id":1,"Name":"\u003cstring>"},"DaysBeforeInvoiceCreation":123,"DaysUntilDue":30,"ProrateType":{"Id":1,"Name":"\u003cstring>"},"AutoInvoiceTicketProducts":true,"InvoiceTemplateId":123,"InvoiceEmailTemplateId":123,"BrandingThemeId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","AutoApproveAndSend":true,"Contacts":[{"Id":1,"Name":"\u003cstring>"}],"RecurringAmount":6870,"RecurringCost":2981.36,"ServiceLines":[{"Id":88214,"Name":"\u003cstring>","CreatedOn":"2023-11-07T05:31:56Z","UpdatedOn":"2023-11-07T05:31:56Z","LaborTerms":{"Id":1,"Name":"\u003cstring>"},"WorkTypes":[{"Id":1,"Name":"\u003cstring>"}],"WorkRoles":[{"Id":1,"Name":"\u003cstring>"}],"AutoApproveTime":true,"AutoInvoiceTime":true,"IncludedTimeGoesTo":{"Id":1,"Name":"\u003cstring>"},"UnlimitedHoursDetails":{},"PerHourDetails":{"RateType":{"Id":1,"Name":"\u003cstring>"},"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":123,"HourlyRate":123,"CoaCode":"\u003cstring>"}],"WorkTypes":[{"WorkTypeId":123,"HourlyMultiplier":123,"CoaCode":"\u003cstring>"}]}},"LimitedHoursDetails":{"ShowRemainingHoursInClientPortal":true,"AllocatedHours":123,"RateType":{"Id":1,"Name":"\u003cstring>"},"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":123,"HourlyRate":123,"CoaCode":"\u003cstring>"}],"WorkTypes":[{"WorkTypeId":123,"HourlyMultiplier":123,"CoaCode":"\u003cstring>"}]}},"BlockHoursDetails":{"ShowRemainingHoursInClientPortal":true,"TemplateId":123,"Balance":123,"WarningThreshold":123,"OverrunThreshold":123},"RecurringAmount":123,"RecurringCost":123,"LineItems":[{"Id":123,"ItemId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","ItemType":{"Id":1,"Name":"\u003cstring>"},"Name":"\u003cstring>","Description":"\u003cstring>","Quantity":123,"UnitCost":123,"UnitPrice":123,"DiscountPercent":123,"StartDate":"2023-12-25","EndDate":"2023-12-25","Tax":{"Id":1,"Name":"\u003cstring>"},"Amount":123,"TaxAmount":123,"BillableStatus":{"Id":1,"Name":"\u003cstring>"}}]}]},"DataContext":null,"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of the contract.","format":"int64","example":4021,"uniqueKey":"Data.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Name of the contract.","example":"All Labor Terms Example","uniqueKey":"Data.Name","typeLabel":"string"},"Status":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Status.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Status.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Status","typeLabel":"object"},"Client":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Client.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Client.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Client","typeLabel":"object"},"LocationIds":{"type":"array","items":{"type":"integer","format":"int64","uniqueKey":"Data.LocationIds.items.[INDEX]","typeLabel":"integer\u003cint64>"},"description":"The client locations the contract is scoped to, as location ids. Empty\r\nwhen the contract covers every one of the client's locations (see\r\n`IsForAllLocations`) as well as when a location-scoped contract's rows have all\r\nbeen removed; never null.","uniqueKey":"Data.LocationIds","typeLabel":"integer\u003cint64>[]"},"IsForAllLocations":{"type":"boolean","description":"Whether the contract covers every one of the client's locations rather than the specific\r\nones named in `LocationIds`. When true, `LocationIds` is empty by\r\ndefinition.","uniqueKey":"Data.IsForAllLocations","typeLabel":"boolean"},"CreatedOn":{"oneOf":[{"type":"string","description":"When the contract was created, in UTC.","format":"date-time","uniqueKey":"Data.CreatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the contract was created, in UTC.","format":"date-time","uniqueKey":"Data.CreatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.CreatedOn","typeLabel":"string\u003cdate-time> | null"},"UpdatedOn":{"oneOf":[{"type":"string","description":"When the contract was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.UpdatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the contract was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.UpdatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.UpdatedOn","typeLabel":"string\u003cdate-time> | null"},"Reference":{"oneOf":[{"type":"string","description":"The contract's invoice reference, free text. Null when it is not set.","example":"MSA-2025-014","uniqueKey":"Data.Reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"The contract's invoice reference, free text. Null when it is not set.","example":"MSA-2025-014","uniqueKey":"Data.Reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.Reference","typeLabel":"string | null"},"StartDate":{"type":"string","description":"Date the contract's coverage starts, a calendar date.","format":"date","uniqueKey":"Data.StartDate","typeLabel":"string\u003cdate>"},"EndDate":{"oneOf":[{"type":"string","description":"Date the contract's coverage ends, a calendar date, or null when it is open-ended.","format":"date","uniqueKey":"Data.EndDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date the contract's coverage ends, a calendar date, or null when it is open-ended.","format":"date","uniqueKey":"Data.EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.EndDate","typeLabel":"string\u003cdate> | null"},"RepeatPeriod":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.RepeatPeriod.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.RepeatPeriod.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.RepeatPeriod","typeLabel":"object"},"DaysBeforeInvoiceCreation":{"oneOf":[{"type":"integer","description":"How many days before the billing period ends the invoice is generated.","format":"int32","uniqueKey":"Data.DaysBeforeInvoiceCreation.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"How many days before the billing period ends the invoice is generated.","format":"int32","uniqueKey":"Data.DaysBeforeInvoiceCreation.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.DaysBeforeInvoiceCreation","typeLabel":"integer\u003cint32> | null"},"DaysUntilDue":{"type":"integer","description":"How many days the client has to pay once invoiced. Renamed from `InvoiceDue` (ENG-7288).","format":"int32","example":30,"uniqueKey":"Data.DaysUntilDue","typeLabel":"integer\u003cint32>"},"ProrateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ProrateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ProrateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ProrateType","typeLabel":"object"},"AutoInvoiceTicketProducts":{"type":"boolean","description":"Whether approved ticket products for this client are swept into the contract's next\r\nrecurring invoice. Only ever true on a contract that covers all the client's locations.","uniqueKey":"Data.AutoInvoiceTicketProducts","typeLabel":"boolean"},"InvoiceTemplateId":{"oneOf":[{"type":"integer","description":"Invoice template invoices raised from this contract use. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Invoice template invoices raised from this contract use. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.InvoiceTemplateId","typeLabel":"integer\u003cint64> | null"},"InvoiceEmailTemplateId":{"oneOf":[{"type":"integer","description":"Email template invoices raised from this contract are sent with. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceEmailTemplateId.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Email template invoices raised from this contract are sent with. Null means the service provider's default.","format":"int64","uniqueKey":"Data.InvoiceEmailTemplateId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.InvoiceEmailTemplateId","typeLabel":"integer\u003cint64> | null"},"BrandingThemeId":{"oneOf":[{"type":"string","description":"Accounting-system branding theme invoices raised from this contract use. Null means the default.","format":"uuid","uniqueKey":"Data.BrandingThemeId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"Accounting-system branding theme invoices raised from this contract use. Null means the default.","format":"uuid","uniqueKey":"Data.BrandingThemeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.BrandingThemeId","typeLabel":"string\u003cuuid> | null"},"AutoApproveAndSend":{"oneOf":[{"type":"boolean","description":"Whether an invoice raised from this contract is approved and sent automatically.","uniqueKey":"Data.AutoApproveAndSend.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether an invoice raised from this contract is approved and sent automatically.","uniqueKey":"Data.AutoApproveAndSend.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.AutoApproveAndSend","typeLabel":"boolean | null"},"Contacts":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.Contacts.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.Contacts.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.Contacts.items.[INDEX]","typeLabel":"object"},"description":"The contacts who can auto-approve invoices on this contract. Empty when none are set.","uniqueKey":"Data.Contacts","typeLabel":"object[]"},"RecurringAmount":{"type":"number","description":"Total recurring amount the contract bills each period, before tax.","format":"double","example":6870,"uniqueKey":"Data.RecurringAmount","typeLabel":"number\u003cdouble>"},"RecurringCost":{"type":"number","description":"Total recurring cost of the contract's recurring products each period.","format":"double","example":2981.36,"uniqueKey":"Data.RecurringCost","typeLabel":"number\u003cdouble>"},"ServiceLines":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of the service line. The same value a time entry's ServiceLineId carries.","format":"int64","example":88214,"uniqueKey":"Data.ServiceLines.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Name of the service line.","uniqueKey":"Data.ServiceLines.items.[INDEX].Name","typeLabel":"string"},"CreatedOn":{"oneOf":[{"type":"string","description":"When the service line was created, in UTC.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the service line was created, in UTC.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].CreatedOn","typeLabel":"string\u003cdate-time> | null"},"UpdatedOn":{"oneOf":[{"type":"string","description":"When the service line was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the service line was last changed, in UTC. Null when it has never been changed.","format":"date-time","uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].UpdatedOn","typeLabel":"string\u003cdate-time> | null"},"LaborTerms":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LaborTerms","typeLabel":"object"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The work types this line applies to. Only recorded for an Unlimited Hours line; empty for\r\nevery other `LaborTerms` today, since the other labor terms carry no work-type\r\nselection of their own in storage.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkTypes","typeLabel":"object[]"},"WorkRoles":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX].Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"Same coverage as `WorkTypes`, for billing roles.","uniqueKey":"Data.ServiceLines.items.[INDEX].WorkRoles","typeLabel":"object[]"},"AutoApproveTime":{"type":"boolean","description":"Whether time logged against this line is approved automatically. False on a No Labor Terms line.","uniqueKey":"Data.ServiceLines.items.[INDEX].AutoApproveTime","typeLabel":"boolean"},"AutoInvoiceTime":{"type":"boolean","description":"The app's \"Auto Invoice Time\": approved time waiting on this line is swept into the\r\ncontract's recurring invoice. False on a No Labor Terms line.","uniqueKey":"Data.ServiceLines.items.[INDEX].AutoInvoiceTime","typeLabel":"boolean"},"IncludedTimeGoesTo":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].IncludedTimeGoesTo","typeLabel":"object"},"UnlimitedHoursDetails":{"type":"object","additionalProperties":false,"description":"Nothing is specific to an Unlimited Hours line today. `AutoApprove` moved to the service\r\nline as `AutoApproveTime` (ENG-7288).","uniqueKey":"Data.ServiceLines.items.[INDEX].UnlimitedHoursDetails","typeLabel":"object"},"PerHourDetails":{"type":"object","properties":{"RateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.RateType","typeLabel":"object"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"type":"integer","description":"The billing role.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64>"},"HourlyRate":{"type":"number","description":"Rate charged per hour for this role on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"The rate per billing role.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkRoles","typeLabel":"object[]"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"type":"integer","description":"The work type.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64>"},"HourlyMultiplier":{"type":"number","description":"Multiplier applied to the role's rate for this work type on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The multiplier per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates.WorkTypes","typeLabel":"object[]"}},"additionalProperties":false,"description":"The Custom labor rates grid of a Per Hour or Limited Hours line: one row per billing role and per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].PerHourDetails","typeLabel":"object"},"LimitedHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"type":"boolean","description":"Whether the client portal shows the client the hours left in the allocation.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean"},"AllocatedHours":{"oneOf":[{"type":"number","description":"Hours included each billing period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Hours included each billing period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.AllocatedHours","typeLabel":"number\u003cdouble> | null"},"RateType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.RateType","typeLabel":"object"},"HourlyRate":{"oneOf":[{"type":"number","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The flat rate charged per hour. Set only when `RateType` is Fixed; null otherwise.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.HourlyRate","typeLabel":"number\u003cdouble> | null"},"CustomRates":{"type":"object","properties":{"WorkRoles":{"type":"array","items":{"type":"object","properties":{"WorkRoleId":{"type":"integer","description":"The billing role.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].WorkRoleId","typeLabel":"integer\u003cint64>"},"HourlyRate":{"type":"number","description":"Rate charged per hour for this role on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].HourlyRate","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the role's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles.items.[INDEX]","typeLabel":"object"},"description":"The rate per billing role.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkRoles","typeLabel":"object[]"},"WorkTypes":{"type":"array","items":{"type":"object","properties":{"WorkTypeId":{"type":"integer","description":"The work type.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].WorkTypeId","typeLabel":"integer\u003cint64>"},"HourlyMultiplier":{"type":"number","description":"Multiplier applied to the role's rate for this work type on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].HourlyMultiplier","typeLabel":"number\u003cdouble>"},"CoaCode":{"oneOf":[{"type":"string","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Accounting code the work type's time is posted to. Null when not set.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX].CoaCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes.items.[INDEX]","typeLabel":"object"},"description":"The multiplier per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates.WorkTypes","typeLabel":"object[]"}},"additionalProperties":false,"description":"The Custom labor rates grid of a Per Hour or Limited Hours line: one row per billing role and per work type.","uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails.CustomRates","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].LimitedHoursDetails","typeLabel":"object"},"BlockHoursDetails":{"type":"object","properties":{"ShowRemainingHoursInClientPortal":{"type":"boolean","description":"Whether the client portal shows the client the hours left in the block.","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.ShowRemainingHoursInClientPortal","typeLabel":"boolean"},"TemplateId":{"type":"integer","description":"The Block Hours Template the block was created from. 0 means Custom: no template applies.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.TemplateId","typeLabel":"integer\u003cint64>"},"Balance":{"oneOf":[{"type":"number","description":"The block's total balance, in hours.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"The block's total balance, in hours.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.Balance","typeLabel":"number\u003cdouble> | null"},"WarningThreshold":{"oneOf":[{"type":"number","description":"Percentage of the block left at which a low-balance warning is raised, a whole number from\r\n0 to 90. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage of the block left at which a low-balance warning is raised, a whole number from\r\n0 to 90. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.WarningThreshold","typeLabel":"number\u003cdouble> | null"},"OverrunThreshold":{"oneOf":[{"type":"number","description":"Percentage of the block the client may run past zero before the block counts as overrun, a\r\nwhole number from 0 to 50. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage of the block the client may run past zero before the block counts as overrun, a\r\nwhole number from 0 to 50. Earlier documented as hours, which it never was.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails.OverrunThreshold","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"Data.ServiceLines.items.[INDEX].BlockHoursDetails","typeLabel":"object"},"RecurringAmount":{"type":"number","description":"Recurring amount this service line bills each period, before tax.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].RecurringAmount","typeLabel":"number\u003cdouble>"},"RecurringCost":{"type":"number","description":"Recurring cost of this service line's recurring products each period.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].RecurringCost","typeLabel":"number\u003cdouble>"},"LineItems":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"integer","description":"Identifier of this line.","format":"int64","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Id","typeLabel":"integer\u003cint64>"},"ItemId":{"oneOf":[{"type":"string","description":"The catalog item this line bills, resolving against `GET /v1/items`. Null for a line\r\nthat does not reference a catalog item.","format":"uuid","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"The catalog item this line bills, resolving against `GET /v1/items`. Null for a line\r\nthat does not reference a catalog item.","format":"uuid","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemId","typeLabel":"string\u003cuuid> | null"},"ItemType":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].ItemType","typeLabel":"object"},"Name":{"type":"string","description":"Name of the line as billed.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Name","typeLabel":"string"},"Description":{"oneOf":[{"type":"string","description":"Description of the line as billed, if any.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description of the line as billed, if any.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Description","typeLabel":"string | null"},"Quantity":{"oneOf":[{"type":"number","description":"Quantity billed.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Quantity billed.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Quantity","typeLabel":"number\u003cdouble> | null"},"UnitCost":{"oneOf":[{"type":"number","description":"Unit cost of the line. Renamed from `Cost` (ENG-7288), the name items and invoice lines use.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Unit cost of the line. Renamed from `Cost` (ENG-7288), the name items and invoice lines use.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitCost","typeLabel":"number\u003cdouble> | null"},"UnitPrice":{"type":"number","description":"Unit price charged.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].UnitPrice","typeLabel":"number\u003cdouble>"},"DiscountPercent":{"oneOf":[{"type":"number","description":"Discount percentage applied to this line, 0-100.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Discount percentage applied to this line, 0-100.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].DiscountPercent","typeLabel":"number\u003cdouble> | null"},"StartDate":{"oneOf":[{"type":"string","description":"Date this line's coverage starts, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date this line's coverage starts, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].StartDate","typeLabel":"string\u003cdate> | null"},"EndDate":{"oneOf":[{"type":"string","description":"Date this line's coverage ends, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Date this line's coverage ends, if it is date-scoped. A calendar date.","format":"date","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].EndDate","typeLabel":"string\u003cdate> | null"},"Tax":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Tax","typeLabel":"object"},"Amount":{"type":"number","description":"Line total after discount, before tax.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].Amount","typeLabel":"number\u003cdouble>"},"TaxAmount":{"oneOf":[{"type":"number","description":"Tax on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Tax on this line.","format":"double","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].TaxAmount","typeLabel":"number\u003cdouble> | null"},"BillableStatus":{"type":"object","properties":{"Id":{"type":"integer","description":"Numeric identifier of the coded value (e.g. status, priority, type, or source id).","format":"int64","example":1,"uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus.Id","typeLabel":"integer\u003cint64>"},"Name":{"type":"string","description":"Display name of the coded value.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus.Name","typeLabel":"string"}},"additionalProperties":false,"description":"A coded value, such as a status, priority, type or source, as an id and a display name.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX].BillableStatus","typeLabel":"object"}},"additionalProperties":false,"description":"One product, bundle or labor charge billed on a contract's service line.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems.items.[INDEX]","typeLabel":"object"},"description":"The actual products/labor billed on this line. Empty array when nothing is billed on it\r\nyet; never null.","uniqueKey":"Data.ServiceLines.items.[INDEX].LineItems","typeLabel":"object[]"}},"additionalProperties":false,"description":"One service line inside a contract, with the products/labor billed on it.","uniqueKey":"Data.ServiceLines.items.[INDEX]","typeLabel":"object"},"description":"The contract's service lines. Empty when the contract has none; never null.","uniqueKey":"Data.ServiceLines","typeLabel":"object[]"}},"additionalProperties":false,"description":"Everything about one contract: the client and locations it covers, its billing schedule, and\r\neach service line with the actual products/labor billed on it.","uniqueKey":"Data","typeLabel":"object"},"DataContext":{"oneOf":[{"type":"object","additionalProperties":false,"example":null,"uniqueKey":"DataContext.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"example":null,"uniqueKey":"DataContext.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext","typeLabel":"object | null"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":{"Id":4021,"Name":"All Labor Terms Example","Status":{"Id":1,"Name":"\u003cstring>"},"Client":{"Id":1,"Name":"\u003cstring>"},"LocationIds":[123],"IsForAllLocations":true,"CreatedOn":"2023-11-07T05:31:56Z","UpdatedOn":"2023-11-07T05:31:56Z","Reference":"MSA-2025-014","StartDate":"2023-12-25","EndDate":"2023-12-25","RepeatPeriod":{"Id":1,"Name":"\u003cstring>"},"DaysBeforeInvoiceCreation":123,"DaysUntilDue":30,"ProrateType":{"Id":1,"Name":"\u003cstring>"},"AutoInvoiceTicketProducts":true,"InvoiceTemplateId":123,"InvoiceEmailTemplateId":123,"BrandingThemeId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","AutoApproveAndSend":true,"Contacts":[{"Id":1,"Name":"\u003cstring>"}],"RecurringAmount":6870,"RecurringCost":2981.36,"ServiceLines":[{"Id":88214,"Name":"\u003cstring>","CreatedOn":"2023-11-07T05:31:56Z","UpdatedOn":"2023-11-07T05:31:56Z","LaborTerms":{"Id":1,"Name":"\u003cstring>"},"WorkTypes":[{"Id":1,"Name":"\u003cstring>"}],"WorkRoles":[{"Id":1,"Name":"\u003cstring>"}],"AutoApproveTime":true,"AutoInvoiceTime":true,"IncludedTimeGoesTo":{"Id":1,"Name":"\u003cstring>"},"UnlimitedHoursDetails":{},"PerHourDetails":{"RateType":{"Id":1,"Name":"\u003cstring>"},"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":123,"HourlyRate":123,"CoaCode":"\u003cstring>"}],"WorkTypes":[{"WorkTypeId":123,"HourlyMultiplier":123,"CoaCode":"\u003cstring>"}]}},"LimitedHoursDetails":{"ShowRemainingHoursInClientPortal":true,"AllocatedHours":123,"RateType":{"Id":1,"Name":"\u003cstring>"},"HourlyRate":123,"CustomRates":{"WorkRoles":[{"WorkRoleId":123,"HourlyRate":123,"CoaCode":"\u003cstring>"}],"WorkTypes":[{"WorkTypeId":123,"HourlyMultiplier":123,"CoaCode":"\u003cstring>"}]}},"BlockHoursDetails":{"ShowRemainingHoursInClientPortal":true,"TemplateId":123,"Balance":123,"WarningThreshold":123,"OverrunThreshold":123},"RecurringAmount":123,"RecurringCost":123,"LineItems":[{"Id":123,"ItemId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","ItemType":{"Id":1,"Name":"\u003cstring>"},"Name":"\u003cstring>","Description":"\u003cstring>","Quantity":123,"UnitCost":123,"UnitPrice":123,"DiscountPercent":123,"StartDate":"2023-12-25","EndDate":"2023-12-25","Tax":{"Id":1,"Name":"\u003cstring>"},"Amount":123,"TaxAmount":123,"BillableStatus":{"Id":1,"Name":"\u003cstring>"}}]}]},"DataContext":null,"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"29ca90b7-1aba-4520-bf6e-d5b1b92001bb":{"description":"Bad Request","content":{"text/plain":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"adb705cb-0774-4f44-ab42-3dcf87b6f7f7":{"description":"Unauthorized","content":{"text/plain":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"67b04657-1bc3-4a22-a969-2cb1faa2861a":{"description":"Not Found","content":{"text/plain":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"45f8f6e9-233b-4988-8f8e-bfc4ca181f53":{"description":"Conflict","content":{"text/plain":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"66b3961b-5d1b-4e40-bbc4-2e42ff91dd73":{"description":"Internal Server Error","content":{"text/plain":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"StatusCode":{"enum":[100,101,102,103,200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,423,424,426,428,429,431,451,500,501,502,503,504,505,506,507,508,510,511],"type":"integer","format":"int32","uniqueKey":"StatusCode","typeLabel":"enum\u003cinteger>"},"IsSuccess":{"type":"boolean","uniqueKey":"IsSuccess","typeLabel":"boolean"},"Data":{"oneOf":[{},{"type":"null","uniqueKey":"Data.oneOf.1","typeLabel":"null"}],"uniqueKey":"Data","typeLabel":"null"},"DataContext":{"type":"object","properties":{"TraceId":{"oneOf":[{"type":"string","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Request correlation id. Quote this when reporting a problem.","uniqueKey":"DataContext.TraceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"DataContext.TraceId","typeLabel":"string | null"}},"additionalProperties":false,"description":"The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest.","uniqueKey":"DataContext","typeLabel":"object"},"Notifications":{"type":"array","items":{"type":"object","properties":{"Code":{"pattern":"^[0-9]{6}$","type":"string","description":"6-digit MMTTNN error code. See the Public API error-code registry.","example":"070101","uniqueKey":"Notifications.items.[INDEX].Code","typeLabel":"string"},"Message":{"type":"string","uniqueKey":"Notifications.items.[INDEX].Message","typeLabel":"string"},"PropertyName":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].PropertyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].PropertyName","typeLabel":"string | null"},"ActionHint":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].ActionHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].ActionHint","typeLabel":"string | null"},"DocUrl":{"oneOf":[{"type":"string","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"Notifications.items.[INDEX].DocUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"Notifications.items.[INDEX].DocUrl","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"Notifications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Notifications","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"StatusCode":100,"IsSuccess":true,"Data":"\u003cunknown>","DataContext":{"TraceId":"\u003cstring>"},"Notifications":[{"Code":"070101","Message":"\u003cstring>","PropertyName":"\u003cstring>","ActionHint":"\u003cstring>","DocUrl":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"7b6acf03-bfa6-4539-9826-c3ecbd3f6d24":{"ApiKeyAuth":{"type":"apiKey","description":"Your Gorelo API key. See [Generate API key](/generate-api-key). If your data is hosted in Australia, click the base URL at the top of this page and select `https://api.aue.gorelo.io`.","name":"X-API-Key","in":"header","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"b46ffe4c-4a54-4e1e-a59b-94a3878c23e4":{"url":"https://api.usw.gorelo.io","description":"US"},"31fc67d7-965e-4c8a-946c-9895ebae16df":{"url":"https://api.aue.gorelo.io","description":"Australia"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","description":"Your Gorelo API key. See [Generate API key](/generate-api-key). If your data is hosted in Australia, click the base URL at the top of this page and select `https://api.aue.gorelo.io`.","name":"X-API-Key","in":"header","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-API-Key","type":"string","description":"Your Gorelo API key. See [Generate API key](/generate-api-key). If your data is hosted in Australia, click the base URL at the top of this page and select `https://api.aue.gorelo.io`.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-API-Key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"gorelo","siteName":"Gorelo Documentation","title":"Updates a contract and its service lines. - Gorelo Documentation","contextualStarterQuestions":[],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/billing/updates-a-contract-and-its-service-lines","matchLevel":1},"ar":{"href":"/ar/api-reference/billing/updates-a-contract-and-its-service-lines","matchLevel":0},"pt-BR":{"href":"/pt-br/api-reference/billing/updates-a-contract-and-its-service-lines","matchLevel":1},"fr-CA":{"href":"/fr-ca/api-reference/billing/updates-a-contract-and-its-service-lines","matchLevel":1},"ca":{"href":"/ca/api-reference/billing/updates-a-contract-and-its-service-lines","matchLevel":1},"cn":{"href":"/cn/api-reference/billing/updates-a-contract-and-its-service-lines","matchLevel":1},"zh":{"href":"/zh/api-reference/billing/updates-a-contract-and-its-service-lines","matchLevel":1}}},"lastModified":"2026-10-29T15:07:49.182Z","originalFileLocation":"ar/api-reference/billing/updates-a-contract-and-its-service-lines.mdx","locale":"ar"},"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=\"dark\"}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=\"Every field is optional and a field left out keeps its value. Reference, EndDate, InvoiceTemplateId, InvoiceEmailTemplateId and BrandingThemeId clear with null; ContactIds: [] removes every auto-approve contact. StatusId 3 archives the contract and 1 restores it. ClientId can\u0026#x27;t change. Once an invoice has been generated from the contract, StartDate and RepeatPeriodId are refused with 409. ServiceLines replaces the set, matched by Id: an entry with an Id updates that line, one without adds a line, and a line left out is removed, which is refused with 409 while it has time logged that hasn\u0026#x27;t been invoiced. Each line\u0026#x27;s LineItems replaces its set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line Balance and the thresholds can change; the template and price can\u0026#x27;t. Returns the contract in the GET /v1/contracts/{contractId} shape.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Gorelo Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/gorelo/WDrabCfHIb0Y7HhN/_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/gorelo/WDrabCfHIb0Y7HhN/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/gorelo/WDrabCfHIb0Y7HhN/_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/gorelo/WDrabCfHIb0Y7HhN/_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/gorelo/WDrabCfHIb0Y7HhN/_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/gorelo/WDrabCfHIb0Y7HhN/_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/gorelo/WDrabCfHIb0Y7HhN/_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/gorelo/WDrabCfHIb0Y7HhN/_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/gorelo/WDrabCfHIb0Y7HhN/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Updates a contract and its service lines. - Gorelo Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Every field is optional and a field left out keeps its value. Reference, EndDate, InvoiceTemplateId, InvoiceEmailTemplateId and BrandingThemeId clear with null; ContactIds: [] removes every auto-approve contact. StatusId 3 archives the contract and 1 restores it. ClientId can\u0026#x27;t change. Once an invoice has been generated from the contract, StartDate and RepeatPeriodId are refused with 409. ServiceLines replaces the set, matched by Id: an entry with an Id updates that line, one without adds a line, and a line left out is removed, which is refused with 409 while it has time logged that hasn\u0026#x27;t been invoiced. Each line\u0026#x27;s LineItems replaces its set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line Balance and the thresholds can change; the template and price can\u0026#x27;t. Returns the contract in the GET /v1/contracts/{contractId} shape.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Gorelo Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://gorelo.mintlify.app/_mintlify/api/og/v2?division=Billing\u0026amp;title=Updates+a+contract+and+its+service+lines.\u0026amp;description=%0A%0D%0A++++++++++++Every+field+is+optional+and+a+field+left+out+keeps+its+value.+%60Reference%60%2C%0D%0A++++++++++++%60EndDate%60%2C+%60InvoiceTemplateId%60%2C+%60InvoiceEmailTemplateId%60+\u0026amp;theme=13a01696fc0cf71f5fdb322b\u0026amp;signature=270d2378b8c88205d9a90367c1ce86733486444566548a2257ee31bc02a1d835\">\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=\"Updates a contract and its service lines. - Gorelo Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Every field is optional and a field left out keeps its value. Reference, EndDate, InvoiceTemplateId, InvoiceEmailTemplateId and BrandingThemeId clear with null; ContactIds: [] removes every auto-approve contact. StatusId 3 archives the contract and 1 restores it. ClientId can\u0026#x27;t change. Once an invoice has been generated from the contract, StartDate and RepeatPeriodId are refused with 409. ServiceLines replaces the set, matched by Id: an entry with an Id updates that line, one without adds a line, and a line left out is removed, which is refused with 409 while it has time logged that hasn\u0026#x27;t been invoiced. Each line\u0026#x27;s LineItems replaces its set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line Balance and the thresholds can change; the template and price can\u0026#x27;t. Returns the contract in the GET /v1/contracts/{contractId} shape.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://gorelo.mintlify.app/_mintlify/api/og/v2?division=Billing\u0026amp;title=Updates+a+contract+and+its+service+lines.\u0026amp;description=%0A%0D%0A++++++++++++Every+field+is+optional+and+a+field+left+out+keeps+its+value.+%60Reference%60%2C%0D%0A++++++++++++%60EndDate%60%2C+%60InvoiceTemplateId%60%2C+%60InvoiceEmailTemplateId%60+\u0026amp;theme=13a01696fc0cf71f5fdb322b\u0026amp;signature=270d2378b8c88205d9a90367c1ce86733486444566548a2257ee31bc02a1d835\">\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/gorelo/WDrabCfHIb0Y7HhN/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Gorelo Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1DAF94\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/ar/api-reference/billing/updates-a-contract-and-its-service-lines.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ar\" href=\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://help.gorelo.io/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://help.gorelo.io/pt-br/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr-CA\" href=\"https://help.gorelo.io/fr-ca/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ca\" href=\"https://help.gorelo.io/ca/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://help.gorelo.io/cn/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://help.gorelo.io/api-reference/billing/updates-a-contract-and-its-service-lines\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.gorelo.io/#organization\",\"name\":\"Gorelo Documentation\",\"url\":\"https://help.gorelo.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/gorelo/J8h_fLstMj_tYUTJ/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=J8h_fLstMj_tYUTJ\u0026q=85\u0026s=3c12ffa7afbcef131d2c6fb36f00e159\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.gorelo.io#website\",\"name\":\"Gorelo Documentation\",\"url\":\"https://help.gorelo.io\",\"publisher\":{\"@id\":\"https://help.gorelo.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines#webpage\",\"url\":\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines\",\"name\":\"Updates a contract and its service lines.\",\"description\":\"Every field is optional and a field left out keeps its value. Reference, EndDate, InvoiceTemplateId, InvoiceEmailTemplateId and BrandingThemeId clear with null; ContactIds: [] removes every auto-approve contact. StatusId 3 archives the contract and 1 restores it. ClientId can't change. Once an invoice has been generated from the contract, StartDate and RepeatPeriodId are refused with 409. ServiceLines replaces the set, matched by Id: an entry with an Id updates that line, one without adds a line, and a line left out is removed, which is refused with 409 while it has time logged that hasn't been invoiced. Each line's LineItems replaces its set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line Balance and the thresholds can change; the template and price can't. Returns the contract in the GET /v1/contracts/{contractId} shape.\",\"dateModified\":\"2026-10-29T15:07:49.182Z\",\"isPartOf\":{\"@id\":\"https://help.gorelo.io#website\"},\"breadcrumb\":{\"@id\":\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"مرجع API\",\"item\":\"https://help.gorelo.io/ar/api-reference/alerts/lists-alerts-for-the-authenticated-service-provider\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Billing\",\"item\":\"https://help.gorelo.io/ar/api-reference/billing/downloads-the-rendered-pdf-for-an-invoice\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Updates a contract and its service lines.\",\"item\":\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines#apireference\",\"headline\":\"Updates a contract and its service lines.\",\"name\":\"Updates a contract and its service lines.\",\"description\":\"Every field is optional and a field left out keeps its value. Reference, EndDate, InvoiceTemplateId, InvoiceEmailTemplateId and BrandingThemeId clear with null; ContactIds: [] removes every auto-approve contact. StatusId 3 archives the contract and 1 restores it. ClientId can't change. Once an invoice has been generated from the contract, StartDate and RepeatPeriodId are refused with 409. ServiceLines replaces the set, matched by Id: an entry with an Id updates that line, one without adds a line, and a line left out is removed, which is refused with 409 while it has time logged that hasn't been invoiced. Each line's LineItems replaces its set the same way. Only a No Labor Terms line can change its labor terms. On a Block Hours line Balance and the thresholds can change; the template and price can't. Returns the contract in the GET /v1/contracts/{contractId} shape.\",\"url\":\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines\",\"mainEntityOfPage\":{\"@id\":\"https://help.gorelo.io/ar/api-reference/billing/updates-a-contract-and-its-service-lines#webpage\"},\"dateModified\":\"2026-10-29T15:07:49.182Z\",\"publisher\":{\"@id\":\"https://help.gorelo.io/#organization\"},\"isPartOf\":{\"@id\":\"https://help.gorelo.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Gorelo Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Gorelo Documentation","nav":{"global":null,"languages":[{"language":"en","default":true,"pages":[{"title":"en","href":"/api-reference/billing/updates-a-contract-and-its-service-lines"}]},{"language":"ar","tabs":[{"tab":"البدء","icon":"rocket-launch","pages":[{"title":"البدء","href":"/ar/what-is-gorelo"}]},{"tab":"تقديم الخدمة","icon":"bell","pages":[{"title":"تقديم الخدمة","href":"/ar/sd-overview"}]},{"tab":"الإدارة عن بُعد","icon":"desktop","pages":[{"title":"الإدارة عن بُعد","href":"/ar/remote-management-overview"}]},{"tab":"الفوترة","icon":"sack-dollar","pages":[{"title":"الفوترة","href":"/ar/how-billing-works"}]},{"tab":"التكاملات","icon":"plug","pages":[{"title":"التكاملات","href":"/ar/integrations-overview"}]},{"tab":"API","icon":"satellite-dish","pages":[{"title":"نظرة عامة على Gorelo API","href":"/ar/api-overview"},{"title":"إنشاء مفتاح API","href":"/ar/generate-api-key"},{"title":"إبطال مفتاح API","href":"/ar/revoke-api-key"},{"group":"مرجع API","pages":[{"group":"Alerts","pages":[{"title":"Lists alerts for the authenticated service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/alerts","href":"/ar/api-reference/alerts/lists-alerts-for-the-authenticated-service-provider"},{"title":"Posts an external alert against a client for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/alerts","href":"/ar/api-reference/alerts/posts-an-external-alert-against-a-client-for-the-service-provider"},{"title":"Changes the status of several alerts at once.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/alerts","href":"/ar/api-reference/alerts/changes-the-status-of-several-alerts-at-once"},{"title":"Gets a single alert by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/alerts/{alertId}","href":"/ar/api-reference/alerts/gets-a-single-alert-by-id"},{"title":"Changes an alert's status: dismisses it, restores it to New, or links it to a ticket.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/alerts/{alertId}","href":"/ar/api-reference/alerts/changes-an-alerts-status:-dismisses-it-restores-it-to-new-or-links-it-to-a-ticket"}]},{"group":"Assets","pages":[{"title":"Lists agent assets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/agents","href":"/ar/api-reference/assets/lists-agent-assets"},{"title":"Lists custom assets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/custom","href":"/ar/api-reference/assets/lists-custom-assets"},{"title":"Creates a custom asset.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/assets/custom","href":"/ar/api-reference/assets/creates-a-custom-asset"},{"title":"Gets a single custom asset by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/custom/{customAssetId}","href":"/ar/api-reference/assets/gets-a-single-custom-asset-by-id"},{"title":"Deletes a custom asset.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/assets/custom/{customAssetId}","href":"/ar/api-reference/assets/deletes-a-custom-asset"},{"title":"Updates a custom asset. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/assets/custom/{customAssetId}","href":"/ar/api-reference/assets/updates-a-custom-asset-send-only-the-fields-you-want-to-change"},{"title":"Gets a single agent (managed device) asset by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/agents/{agentAssetId}","href":"/ar/api-reference/assets/gets-a-single-agent-managed-device-asset-by-id"},{"title":"Deletes an agent (managed device) asset.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/assets/agents/{agentAssetId}","href":"/ar/api-reference/assets/deletes-an-agent-managed-device-asset"},{"title":"Updates an agent (managed device) asset. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/assets/agents/{agentAssetId}","href":"/ar/api-reference/assets/updates-an-agent-managed-device-asset-send-only-the-fields-you-want-to-change"},{"title":"Lists the patches installed on an agent.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/agents/{agentAssetId}/patches","href":"/ar/api-reference/assets/lists-the-patches-installed-on-an-agent"},{"title":"Lists the Windows updates pending on an agent.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/agents/{agentAssetId}/patches/available","href":"/ar/api-reference/assets/lists-the-windows-updates-pending-on-an-agent"},{"title":"Lists the applications installed on an agent.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/agents/{agentAssetId}/apps","href":"/ar/api-reference/assets/lists-the-applications-installed-on-an-agent"},{"title":"Gets an agent's processors, memory and disks.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/agents/{agentAssetId}/hardware","href":"/ar/api-reference/assets/gets-an-agents-processors-memory-and-disks"},{"title":"Lists the tags on an agent.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/agents/{agentAssetId}/tags","href":"/ar/api-reference/assets/lists-the-tags-on-an-agent"},{"title":"Lists the service provider's scripts using cursor pagination.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/scripts","href":"/ar/api-reference/assets/lists-the-service-providers-scripts-using-cursor-pagination"},{"title":"Gets a script, with its content.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/scripts/{scriptId}","href":"/ar/api-reference/assets/gets-a-script-with-its-content"},{"title":"Lists the asset types.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/types","href":"/ar/api-reference/assets/lists-the-asset-types"},{"title":"Creates an asset type.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/assets/types","href":"/ar/api-reference/assets/creates-an-asset-type"},{"title":"Lists the asset tags.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/tags","href":"/ar/api-reference/assets/lists-the-asset-tags"},{"title":"Gets a single asset tag by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/tags/{tagId}","href":"/ar/api-reference/assets/gets-a-single-asset-tag-by-id"},{"title":"Lists the service provider's monitoring policies using cursor pagination.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/policies","href":"/ar/api-reference/assets/lists-the-service-providers-monitoring-policies-using-cursor-pagination"},{"title":"Gets a single monitoring policy by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/policies/{policyId}","href":"/ar/api-reference/assets/gets-a-single-monitoring-policy-by-id"},{"title":"Deletes an asset type.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/assets/types/{assetTypeId}","href":"/ar/api-reference/assets/deletes-an-asset-type"},{"title":"Renames an asset type.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/assets/types/{assetTypeId}","href":"/ar/api-reference/assets/renames-an-asset-type"},{"title":"Lists the hardware types a custom asset can be given. \u003cb>Deprecated:\u003c/b> use `GET /v1/assets/types`.","deprecated":true,"version":null,"openapi":"/api-reference/openapi.json get /v1/assets/custom/hardware-types","href":"/ar/api-reference/assets/lists-the-hardware-types-a-custom-asset-can-be-given-\u003cb>deprecated:\u003cb>-use-`get-v1assetstypes`"},{"title":"Lists uptime checks","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/uptime","href":"/ar/api-reference/assets/lists-uptime-checks"},{"title":"Creates an uptime check.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/uptime","href":"/ar/api-reference/assets/creates-an-uptime-check"},{"title":"Gets a single uptime check by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/uptime/{uptimeId}","href":"/ar/api-reference/assets/gets-a-single-uptime-check-by-id"},{"title":"Deletes an uptime check.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/uptime/{uptimeId}","href":"/ar/api-reference/assets/deletes-an-uptime-check"},{"title":"Updates an uptime check. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/uptime/{uptimeId}","href":"/ar/api-reference/assets/updates-an-uptime-check-send-only-the-fields-you-want-to-change"}]},{"group":"Attachments","pages":[{"title":"Uploads a file and returns a link to it.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/attachments","href":"/ar/api-reference/attachments/uploads-a-file-and-returns-a-link-to-it"}]},{"group":"Billing","pages":[{"title":"Downloads the rendered PDF for an invoice.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/invoices/{invoiceId}/pdf","href":"/ar/api-reference/billing/downloads-the-rendered-pdf-for-an-invoice"},{"title":"Lists billing roles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/billing-roles","href":"/ar/api-reference/billing/lists-billing-roles"},{"title":"Lists work types","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/work-types","href":"/ar/api-reference/billing/lists-work-types"},{"title":"Lists the tax rates configured for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/taxes","href":"/ar/api-reference/billing/lists-the-tax-rates-configured-for-the-service-provider"},{"title":"Lists logged time across every ticket and task, narrowed by any of the filters.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/time-entries","href":"/ar/api-reference/billing/lists-logged-time-across-every-ticket-and-task-narrowed-by-any-of-the-filters"},{"title":"Logs time against a ticket.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/time-entries","href":"/ar/api-reference/billing/logs-time-against-a-ticket"},{"title":"Gets a single time entry by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/time-entries/{timeEntryId}","href":"/ar/api-reference/billing/gets-a-single-time-entry-by-id"},{"title":"Deletes a time entry.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/time-entries/{timeEntryId}","href":"/ar/api-reference/billing/deletes-a-time-entry"},{"title":"Partially updates a time entry. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/time-entries/{timeEntryId}","href":"/ar/api-reference/billing/partially-updates-a-time-entry-send-only-the-fields-you-want-to-change"},{"title":"Lists the products charged to tickets and to project tasks, narrowed by any of the filters.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/product-charges","href":"/ar/api-reference/billing/lists-the-products-charged-to-tickets-and-to-project-tasks-narrowed-by-any-of-the-filters"},{"title":"Charges a catalog item to a ticket or to a project task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/product-charges","href":"/ar/api-reference/billing/charges-a-catalog-item-to-a-ticket-or-to-a-project-task"},{"title":"Gets one product charge.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/product-charges/{productChargeId}","href":"/ar/api-reference/billing/gets-one-product-charge"},{"title":"Removes a product charge from its ticket or task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/product-charges/{productChargeId}","href":"/ar/api-reference/billing/removes-a-product-charge-from-its-ticket-or-task"},{"title":"Partially updates a product charge. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/product-charges/{productChargeId}","href":"/ar/api-reference/billing/partially-updates-a-product-charge-send-only-the-fields-you-want-to-change"},{"title":"Lists billing contracts, each with the service lines it is made of.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/contracts","href":"/ar/api-reference/billing/lists-billing-contracts-each-with-the-service-lines-it-is-made-of"},{"title":"Creates a contract with its service lines.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/contracts","href":"/ar/api-reference/billing/creates-a-contract-with-its-service-lines"},{"title":"Everything about one contract, including each service line's actual products/labor.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/contracts/{contractId}","href":"/ar/api-reference/billing/everything-about-one-contract-including-each-service-lines-actual-productslabor"},{"title":"Deletes a contract.","description":"Blocked with 409 while any time logged against the contract hasn't been invoiced, or any time\r\nis logged on a Block Hours line, the same check the app makes before it deletes. Only the\r\ncontract is deleted: its service lines and locations are kept, so recovering it in the app\r\nbrings it back whole. Deleting a contract that's already\r\ndeleted is accepted as a no-op. A non-existent id, or one belonging to another service\r\nprovider, is a 404.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/contracts/{contractId}","href":"/ar/api-reference/billing/deletes-a-contract"},{"title":"Updates a contract and its service lines.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/contracts/{contractId}","href":"/ar/api-reference/billing/updates-a-contract-and-its-service-lines"},{"title":"Lists the service provider's invoices, filtered and sorted.","description":"Every filter is optional and combining two narrows to invoices that satisfy both. Each id\r\nfilter is a comma-separated list and an invoice matches if its id is any of them; a value\r\nthat is not an id is rejected with 400. A well-formed value that matches nothing is an empty\r\npage, not a 404. Deleted invoices are never listed.\r\n\n`SubTotal` is the line-item total before discount and tax; `Total` is\r\n`SubTotal - TotalDiscount + TotalTax`. `AmountPaid` is computed live from recorded\r\npayments, and `AmountDue` is `Total - AmountPaid`, floored at 0.\r\n\n`InvoiceDate` and `DueDate` are calendar dates. `InvoiceDateSince`/`Before`\r\nand `DueDateSince`/`Before` bound them the same way every other date filter on this\r\nsurface does: the lower bound includes the day it names and the upper bound excludes it.\r\n\n`SortBy` is one of `createdOn` (default), `updatedOn`, `date` (InvoiceDate),\r\n`dueDate` or `totalAmount`; `SortOrder` is `asc` or `desc` (default).\r\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/invoices","href":"/ar/api-reference/billing/lists-the-service-providers-invoices-filtered-and-sorted"},{"title":"Raises a manual invoice against a client, with line items.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/invoices","href":"/ar/api-reference/billing/raises-a-manual-invoice-against-a-client-with-line-items"},{"title":"Gets one invoice, with its attachments and line items.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/invoices/{invoiceId}","href":"/ar/api-reference/billing/gets-one-invoice-with-its-attachments-and-line-items"},{"title":"Deletes or voids an invoice, depending on its current status.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/invoices/{invoiceId}","href":"/ar/api-reference/billing/deletes-or-voids-an-invoice-depending-on-its-current-status"},{"title":"Updates an invoice: its header fields, its status (approve only) and its lines.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/invoices/{invoiceId}","href":"/ar/api-reference/billing/updates-an-invoice:-its-header-fields-its-status-approve-only-and-its-lines"},{"title":"Lists the payments received from clients, newest first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/payments","href":"/ar/api-reference/billing/lists-the-payments-received-from-clients-newest-first"},{"title":"Records a payment received outside Gorelo against an approved invoice.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/payments","href":"/ar/api-reference/billing/records-a-payment-received-outside-gorelo-against-an-approved-invoice"},{"title":"Gets one payment, with the invoices it was applied to.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/payments/{paymentId}","href":"/ar/api-reference/billing/gets-one-payment-with-the-invoices-it-was-applied-to"},{"title":"Deletes a payment that was recorded through the API.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/payments/{paymentId}","href":"/ar/api-reference/billing/deletes-a-payment-that-was-recorded-through-the-api"},{"title":"Lists the service provider's proposals - quotes sent to clients - newest first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/proposals","href":"/ar/api-reference/billing/lists-the-service-providers-proposals--quotes-sent-to-clients--newest-first"},{"title":"Gets one proposal, with the products and bundles it quotes.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/proposals/{proposalId}","href":"/ar/api-reference/billing/gets-one-proposal-with-the-products-and-bundles-it-quotes"},{"title":"Lists the categories products are organised under, each with its subcategories.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/items/categories","href":"/ar/api-reference/billing/lists-the-categories-products-are-organised-under-each-with-its-subcategories"},{"title":"Lists the service provider's item catalog: products and bundles.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/items","href":"/ar/api-reference/billing/lists-the-service-providers-item-catalog:-products-and-bundles"},{"title":"Creates a product or a bundle in the item catalog.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/items","href":"/ar/api-reference/billing/creates-a-product-or-a-bundle-in-the-item-catalog"},{"title":"A single catalog item — a product or a bundle.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/items/{itemId}","href":"/ar/api-reference/billing/a-single-catalog-item-—-a-product-or-a-bundle"},{"title":"Deletes an item.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/items/{itemId}","href":"/ar/api-reference/billing/deletes-an-item"},{"title":"Partially updates an item. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/items/{itemId}","href":"/ar/api-reference/billing/partially-updates-an-item-send-only-the-fields-you-want-to-change"}]},{"group":"Clients","pages":[{"title":"Lists clients","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/clients","href":"/ar/api-reference/clients/lists-clients"},{"title":"Creates a client (and its default location) for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/clients","href":"/ar/api-reference/clients/creates-a-client-and-its-default-location-for-the-service-provider"},{"title":"Gets a single client by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/clients/{clientId}","href":"/ar/api-reference/clients/gets-a-single-client-by-id"},{"title":"Deletes a client.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/clients/{clientId}","href":"/ar/api-reference/clients/deletes-a-client"},{"title":"Updates an existing client. Only supplied (non-null) fields are changed.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/clients/{clientId}","href":"/ar/api-reference/clients/updates-an-existing-client-only-supplied-non-null-fields-are-changed"},{"title":"Lists the locations for a given client.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/clients/{clientId}/locations","href":"/ar/api-reference/clients/lists-the-locations-for-a-given-client"},{"title":"Adds a location to a client.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/clients/{clientId}/locations","href":"/ar/api-reference/clients/adds-a-location-to-a-client"},{"title":"Gets one location of a client.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/clients/{clientId}/locations/{locationId}","href":"/ar/api-reference/clients/gets-one-location-of-a-client"},{"title":"Deletes a location of a client.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/clients/{clientId}/locations/{locationId}","href":"/ar/api-reference/clients/deletes-a-location-of-a-client"},{"title":"Updates a location of a client. Only the fields sent are changed.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/clients/{clientId}/locations/{locationId}","href":"/ar/api-reference/clients/updates-a-location-of-a-client-only-the-fields-sent-are-changed"},{"title":"Lists the client types a client can be given.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/clients/types","href":"/ar/api-reference/clients/lists-the-client-types-a-client-can-be-given"},{"title":"Lists the custom fields defined for clients.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/clients/custom-fields","href":"/ar/api-reference/clients/lists-the-custom-fields-defined-for-clients"},{"title":"Adds a web domain to a client.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/clients/{clientId}/domains","href":"/ar/api-reference/clients/adds-a-web-domain-to-a-client"},{"title":"Deletes a web domain of a client.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/clients/{clientId}/domains/{domainId}","href":"/ar/api-reference/clients/deletes-a-web-domain-of-a-client"},{"title":"Updates a web domain of a client. Only the fields sent are changed.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/clients/{clientId}/domains/{domainId}","href":"/ar/api-reference/clients/updates-a-web-domain-of-a-client-only-the-fields-sent-are-changed"}]},{"group":"Contacts","pages":[{"title":"Gets a single contact by id.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/contacts/{contactId}","href":"/ar/api-reference/contacts/gets-a-single-contact-by-id"},{"title":"Deletes a contact.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/contacts/{contactId}","href":"/ar/api-reference/contacts/deletes-a-contact"},{"title":"Updates an existing contact.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/contacts/{contactId}","href":"/ar/api-reference/contacts/updates-an-existing-contact"},{"title":"Lists the tags a contact can be given.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/contacts/tags","href":"/ar/api-reference/contacts/lists-the-tags-a-contact-can-be-given"},{"title":"Lists contacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/contacts","href":"/ar/api-reference/contacts/lists-contacts"},{"title":"Creates a contact under a client, or a temporary contact when no client is given.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/contacts","href":"/ar/api-reference/contacts/creates-a-contact-under-a-client-or-a-temporary-contact-when-no-client-is-given"}]},{"group":"Deletions","pages":[{"title":"Lists deleted records","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/deletions","href":"/ar/api-reference/deletions/lists-deleted-records"}]},{"group":"Documents","pages":[{"title":"Lists the service provider's documents.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents","href":"/ar/api-reference/documents/lists-the-service-providers-documents"},{"title":"Creates a document.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/documents","href":"/ar/api-reference/documents/creates-a-document"},{"title":"Gets a single document.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/{documentId}","href":"/ar/api-reference/documents/gets-a-single-document"},{"title":"Updates a document.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/documents/{documentId}","href":"/ar/api-reference/documents/updates-a-document"},{"title":"Duplicates a document.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/documents/{documentId}/duplicate","href":"/ar/api-reference/documents/duplicates-a-document"},{"title":"Downloads a document as a PDF.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/{documentId}/pdf","href":"/ar/api-reference/documents/downloads-a-document-as-a-pdf"},{"title":"Lists a document's versions, newest first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/{documentId}/versions","href":"/ar/api-reference/documents/lists-a-documents-versions-newest-first"},{"title":"Gets one version of a document, with its body and attachments.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/{documentId}/versions/{versionId}","href":"/ar/api-reference/documents/gets-one-version-of-a-document-with-its-body-and-attachments"},{"title":"Makes an earlier version the current one.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/documents/{documentId}/versions/{versionId}/restore","href":"/ar/api-reference/documents/makes-an-earlier-version-the-current-one"},{"title":"Lists the records a document is related to.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/{documentId}/related-items","href":"/ar/api-reference/documents/lists-the-records-a-document-is-related-to"},{"title":"Relates a document to other records.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/documents/{documentId}/related-items","href":"/ar/api-reference/documents/relates-a-document-to-other-records"},{"title":"Removes one related item from a document.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/documents/{documentId}/related-items/{relatedItemId}","href":"/ar/api-reference/documents/removes-one-related-item-from-a-document"},{"title":"Lists the structured documents - the account's question templates.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/structured","href":"/ar/api-reference/documents/lists-the-structured-documents--the-accounts-question-templates"},{"title":"Gets a single structured document, with its fields.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/structured/{structuredDocumentId}","href":"/ar/api-reference/documents/gets-a-single-structured-document-with-its-fields"},{"title":"Lists the submissions of a structured document.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/structured/{structuredDocumentId}/submissions","href":"/ar/api-reference/documents/lists-the-submissions-of-a-structured-document"},{"title":"Gets a single submission of a structured document, with its answers and attachments.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/documents/structured/{structuredDocumentId}/submissions/{submissionId}","href":"/ar/api-reference/documents/gets-a-single-submission-of-a-structured-document-with-its-answers-and-attachments"}]},{"group":"Forms","pages":[{"title":"Lists the service provider's forms, most recently updated first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/forms","href":"/ar/api-reference/forms/lists-the-service-providers-forms-most-recently-updated-first"},{"title":"Lists a form's submitted responses, newest first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/forms/{formId}/responses","href":"/ar/api-reference/forms/lists-a-forms-submitted-responses-newest-first"},{"title":"Issues a link through which the form can be submitted.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/forms/{formId}/submission-links","href":"/ar/api-reference/forms/issues-a-link-through-which-the-form-can-be-submitted"}]},{"group":"Organization","pages":[{"title":"Lists users","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/organization/users","href":"/ar/api-reference/organization/lists-users"},{"title":"Returns one user (technician), with their role and the groups they are a member of.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/organization/users/{userId}","href":"/ar/api-reference/organization/returns-one-user-technician-with-their-role-and-the-groups-they-are-a-member-of"},{"title":"Lists user roles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/organization/roles","href":"/ar/api-reference/organization/lists-user-roles"},{"title":"Lists the service provider's API keys using cursor pagination, newest first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/api-keys","href":"/ar/api-reference/organization/lists-the-service-providers-api-keys-using-cursor-pagination-newest-first"},{"title":"Creates an API key for the authenticated service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/api-keys","href":"/ar/api-reference/organization/creates-an-api-key-for-the-authenticated-service-provider"},{"title":"Revokes an API key.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/api-keys/{apiKeyId}","href":"/ar/api-reference/organization/revokes-an-api-key"},{"title":"Lists the technician groups configured for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/organization/groups","href":"/ar/api-reference/organization/lists-the-technician-groups-configured-for-the-service-provider"},{"title":"Returns one technician group, in the same shape as the group list.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/organization/groups/{groupId}","href":"/ar/api-reference/organization/returns-one-technician-group-in-the-same-shape-as-the-group-list"}]},{"group":"Projects","pages":[{"title":"Lists the projects visible to the authenticated service provider, newest activity first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects","href":"/ar/api-reference/projects/lists-the-projects-visible-to-the-authenticated-service-provider-newest-activity-first"},{"title":"Creates a project for the authenticated service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/projects","href":"/ar/api-reference/projects/creates-a-project-for-the-authenticated-service-provider"},{"title":"Gets a single project.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}","href":"/ar/api-reference/projects/gets-a-single-project"},{"title":"Deletes a project and every task in it.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/projects/{projectId}","href":"/ar/api-reference/projects/deletes-a-project-and-every-task-in-it"},{"title":"Updates a project. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/projects/{projectId}","href":"/ar/api-reference/projects/updates-a-project-send-only-the-fields-you-want-to-change"},{"title":"Lists the project tags configured for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/tags","href":"/ar/api-reference/projects/lists-the-project-tags-configured-for-the-service-provider"},{"title":"Lists the project types configured for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/types","href":"/ar/api-reference/projects/lists-the-project-types-configured-for-the-service-provider"},{"title":"Lists the project templates configured for the service provider, newest first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/templates","href":"/ar/api-reference/projects/lists-the-project-templates-configured-for-the-service-provider-newest-first"},{"title":"Lists a project's sections.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/sections","href":"/ar/api-reference/projects/lists-a-projects-sections"},{"title":"Adds a section to a project.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/projects/{projectId}/sections","href":"/ar/api-reference/projects/adds-a-section-to-a-project"},{"title":"Deletes a section and every task in it.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/projects/{projectId}/sections/{sectionId}","href":"/ar/api-reference/projects/deletes-a-section-and-every-task-in-it"},{"title":"Updates a section's title or colour. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/projects/{projectId}/sections/{sectionId}","href":"/ar/api-reference/projects/updates-a-sections-title-or-colour-send-only-the-fields-you-want-to-change"},{"title":"Lists a project's tasks.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/tasks","href":"/ar/api-reference/projects/lists-a-projects-tasks"},{"title":"Creates a task on a project's board.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/projects/{projectId}/tasks","href":"/ar/api-reference/projects/creates-a-task-on-a-projects-board"},{"title":"Returns a project's comments, newest first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/comments","href":"/ar/api-reference/projects/returns-a-projects-comments-newest-first"},{"title":"Posts a comment on a project.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/projects/{projectId}/comments","href":"/ar/api-reference/projects/posts-a-comment-on-a-project"},{"title":"Returns one comment on a project.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/comments/{commentId}","href":"/ar/api-reference/projects/returns-one-comment-on-a-project"},{"title":"Deletes one comment on a project.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/projects/{projectId}/comments/{commentId}","href":"/ar/api-reference/projects/deletes-one-comment-on-a-project"},{"title":"Edits a private comment on a project. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/projects/{projectId}/comments/{commentId}","href":"/ar/api-reference/projects/edits-a-private-comment-on-a-project-send-only-the-fields-you-want-to-change"},{"title":"Returns one task in full.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/tasks/{taskId}","href":"/ar/api-reference/projects/returns-one-task-in-full"},{"title":"Deletes a task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/projects/{projectId}/tasks/{taskId}","href":"/ar/api-reference/projects/deletes-a-task"},{"title":"Updates a task. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/projects/{projectId}/tasks/{taskId}","href":"/ar/api-reference/projects/updates-a-task-send-only-the-fields-you-want-to-change"},{"title":"Returns a task's comments, newest first.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/tasks/{taskId}/comments","href":"/ar/api-reference/projects/returns-a-tasks-comments-newest-first"},{"title":"Posts a comment on a task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/projects/{projectId}/tasks/{taskId}/comments","href":"/ar/api-reference/projects/posts-a-comment-on-a-task"},{"title":"Starts a side conversation on a task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/projects/{projectId}/tasks/{taskId}/conversations/side-conversation","href":"/ar/api-reference/projects/starts-a-side-conversation-on-a-task"},{"title":"Asks contacts to approve something on a task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/projects/{projectId}/tasks/{taskId}/conversations/approval","href":"/ar/api-reference/projects/asks-contacts-to-approve-something-on-a-task"},{"title":"Returns one comment on a task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}","href":"/ar/api-reference/projects/returns-one-comment-on-a-task"},{"title":"Deletes one comment on a task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}","href":"/ar/api-reference/projects/deletes-one-comment-on-a-task"},{"title":"Edits a private comment on a task. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}","href":"/ar/api-reference/projects/edits-a-private-comment-on-a-task-send-only-the-fields-you-want-to-change"},{"title":"Lists the conversations on a task.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/tasks/{taskId}/conversations","href":"/ar/api-reference/projects/lists-the-conversations-on-a-task"},{"title":"Gets one approval on a task, with its approvers.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/projects/{projectId}/tasks/{taskId}/approvals/{approvalId}","href":"/ar/api-reference/projects/gets-one-approval-on-a-task-with-its-approvers"}]},{"group":"Tickets","pages":[{"title":"Lists tickets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets","href":"/ar/api-reference/tickets/lists-tickets"},{"title":"Creates a ticket for the authenticated service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/tickets","href":"/ar/api-reference/tickets/creates-a-ticket-for-the-authenticated-service-provider"},{"title":"Gets a single ticket.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/{ticketId}","href":"/ar/api-reference/tickets/gets-a-single-ticket"},{"title":"Deletes a ticket and its time entries.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/tickets/{ticketId}","href":"/ar/api-reference/tickets/deletes-a-ticket-and-its-time-entries"},{"title":"Partially updates a ticket. Send only the fields you want to change.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/tickets/{ticketId}","href":"/ar/api-reference/tickets/partially-updates-a-ticket-send-only-the-fields-you-want-to-change"},{"title":"Gets a ticket comment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/{ticketId}/comments/{commentId}","href":"/ar/api-reference/tickets/gets-a-ticket-comment"},{"title":"Deletes a private comment from a ticket.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/tickets/{ticketId}/comments/{commentId}","href":"/ar/api-reference/tickets/deletes-a-private-comment-from-a-ticket"},{"title":"Lists the ticket statuses configured for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/statuses","href":"/ar/api-reference/tickets/lists-the-ticket-statuses-configured-for-the-service-provider"},{"title":"Lists the ticket tags configured for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/tags","href":"/ar/api-reference/tickets/lists-the-ticket-tags-configured-for-the-service-provider"},{"title":"Lists the ticket types configured for the service provider.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/types","href":"/ar/api-reference/tickets/lists-the-ticket-types-configured-for-the-service-provider"},{"title":"Lists the ticket priorities.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/priorities","href":"/ar/api-reference/tickets/lists-the-ticket-priorities"},{"title":"Lists the ticket sources.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/sources","href":"/ar/api-reference/tickets/lists-the-ticket-sources"},{"title":"Lists ticket comments","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/{ticketId}/comments","href":"/ar/api-reference/tickets/lists-ticket-comments"},{"title":"Adds a comment to a ticket","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/tickets/{ticketId}/comments","href":"/ar/api-reference/tickets/adds-a-comment-to-a-ticket"},{"title":"Lists ticket conversations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/{ticketId}/conversations","href":"/ar/api-reference/tickets/lists-ticket-conversations"},{"title":"Gets a ticket approval","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/tickets/{ticketId}/approvals/{approvalId}","href":"/ar/api-reference/tickets/gets-a-ticket-approval"},{"title":"Renames an approval on a ticket.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/tickets/{ticketId}/approvals/{approvalId}","href":"/ar/api-reference/tickets/renames-an-approval-on-a-ticket"},{"title":"Creates an approval on a ticket","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/tickets/{ticketId}/conversations/approval","href":"/ar/api-reference/tickets/creates-an-approval-on-a-ticket"},{"title":"Creates a side conversation on a ticket","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/tickets/{ticketId}/conversations/side-conversation","href":"/ar/api-reference/tickets/creates-a-side-conversation-on-a-ticket"}]}]}]}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/pt-br/api-reference/billing/updates-a-contract-and-its-service-lines"}]},{"language":"fr-CA","pages":[{"title":"fr-CA","href":"/fr-ca/api-reference/billing/updates-a-contract-and-its-service-lines"}]},{"language":"ca","pages":[{"title":"ca","href":"/ca/api-reference/billing/updates-a-contract-and-its-service-lines"}]},{"language":"cn","pages":[{"title":"cn","href":"/cn/api-reference/billing/updates-a-contract-and-its-service-lines"}]},{"language":"zh","pages":[{"title":"zh","href":"/zh/api-reference/billing/updates-a-contract-and-its-service-lines"}]}]},"title":"Updates a contract and its service lines. - Gorelo Documentation","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-CBCH2P7b.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}