{"openapi": "3.1.0", "info": {"title": "Proiect.ro API", "version": "1.0.0", "description": ""}, "paths": {"/api/v1/{tenant_path}/tenant_info": {"get": {"operationId": "tenant_info", "summary": "Tenant Info", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantInfo"}}}}}, "description": "Retrieve workspace preferences including name, timezone, default currency,\ncountry, and business rules. Use this to understand the current workspace\nconfiguration before making changes.", "tags": ["tenant"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tenant_legal_info": {"get": {"operationId": "tenant_legal_info", "summary": "Tenant Legal Info", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantLegalInfo"}}}}}, "description": "Retrieve legal entity information for the workspace including company\nregistration details, tax identifiers, and registered address. Essential\nfor generating compliant invoices and contracts.", "tags": ["tenant"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tenant_project_defaults": {"get": {"operationId": "tenant_project_defaults", "summary": "Tenant Project Defaults", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantProjectDefaults"}}}}}, "description": "Retrieve default settings applied to new projects. These settings control\nwhich management features are enabled by default and the standard WBS\nconfiguration for new projects.", "tags": ["tenant"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tenant_portal_settings": {"get": {"operationId": "tenant_portal_settings", "summary": "Tenant Portal Settings", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantPortalSettings"}}}}}, "description": "Retrieve customer portal customization settings including welcome messages\nand branding colors. Use this to preview current portal appearance before\nmaking changes.", "tags": ["tenant"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_tenant/": {"patch": {"operationId": "edit_tenant", "summary": "Edit Tenant", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update fundamental workspace settings that affect all operations and users. Changes\nto timezone impact scheduling and reporting timestamps. Currency modifications affect\nfinancial calculations and default pricing. Country settings influence tax calculations\nand regulatory compliance. Minimum margin thresholds enforce profitability controls\non all proposals. Exercise caution as these changes have workspace-wide impact on\nall transactions and reports.", "tags": ["tenant"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTenant"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_tenant_legal_info/": {"patch": {"operationId": "edit_tenant_legal_info", "summary": "Edit Tenant Legal Info", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Maintain legal entity information essential for contracts, invoicing, and compliance.\nUpdate registration numbers, tax identifiers, and addresses when corporate changes\noccur. Accurate legal information prevents invoice rejection and regulatory issues.\nMultiple tax identifier fields support complex international requirements. Changes\napply immediately to all generated documents. Review carefully before updating as\nincorrect information can delay payments and cause compliance violations.", "tags": ["tenant"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTenantLegalInfo"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_tenant_project_defaults": {"patch": {"operationId": "edit_tenant_project_defaults", "summary": "Edit Tenant Project Defaults", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update default project settings for tenant.", "tags": ["tenant"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTenantProjectDefaults"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_tenant_portal_settings": {"patch": {"operationId": "edit_tenant_portal_settings", "summary": "Edit Tenant Portal Settings", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Update the customer portal's branding, and how both portals take orders and quote requests:\nthe funnels they arrive in, the order policy, and what new customers and partnerships start with.", "tags": ["tenant"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTenantPortalSettings"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/business_process/{process_name}": {"get": {"operationId": "tenant_business_process", "summary": "Tenant Business Process", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "process_name", "schema": {"title": "Process Name", "type": "string"}, "required": true}, {"in": "query", "name": "highlight_task", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Highlight Task"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputBusinessProcess"}}}}}, "description": "Get detailed information about a business process.\nShows all tasks in order with optional highlighting of the current task.", "tags": ["tenant"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/business_processes_list": {"get": {"operationId": "tenant_business_processes_list", "summary": "Tenant Business Processes List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputBusinessProcessesList"}}}}}, "description": "Get all business processes grouped by category.\nReturns a complete catalog of available business processes organized by functional area.", "tags": ["tenant"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/team": {"get": {"operationId": "tenant_team", "summary": "Tenant Team", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by name, email, nickname, or work email", "title": "Search"}, "required": false, "description": "Search by name, email, nickname, or work email"}, {"in": "query", "name": "nickname", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by workspace nickname", "q": "nickname__icontains", "title": "Nickname"}, "required": false, "description": "Filter by workspace nickname"}, {"in": "query", "name": "work_email", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by work email address", "q": "work_email__icontains", "title": "Work Email"}, "required": false, "description": "Filter by work email address"}, {"in": "query", "name": "territory", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by territory", "q": "territory__icontains", "title": "Territory"}, "required": false, "description": "Filter by territory"}, {"in": "query", "name": "is_active", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter by active/inactive status", "q": "is_active", "title": "Is Active"}, "required": false, "description": "Filter by active/inactive status"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TeamMembers"}}}}}, "description": "View all workspace team members and pending invitations for comprehensive team oversight.\nShows active and inactive members with their workspace-specific details. Monitor invitation\nstatus to track onboarding progress. Essential for team management, capacity planning,\nand access control auditing. Inactive members appear for historical reference.\nSupports filtering by name, email, nickname, territory, tags, and labels.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/member_load/{member_id}": {"get": {"operationId": "member_load", "summary": "Member Load", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MemberLoadDetailSchema"}}}}}, "description": "View team member load and capacity utilization.\nShows individual member load details with availability, holidays, and bookings.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/contacts/{org_id}": {"get": {"operationId": "tenant_org_contacts", "summary": "Tenant Org Contacts", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OrgContacts"}}}}}, "description": "Access customer organization contacts for relationship management and portal access control.\nShows contacts with and without portal access, including invitation status. Essential for\ncustomer communication, project stakeholder tracking, and portal access management.\nIncludes job titles and contact details for effective engagement.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/invite_to_team": {"post": {"operationId": "invite_to_team", "summary": "Invite To Team", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Invite new team members to join your workspace with role-based permissions. Sends email\ninvitations to both existing users and new email addresses. Supports viral growth by\nallowing non-users to accept before creating accounts. Duplicate invitations are\nprevented automatically. Consider team capacity and licensing before inviting.", "tags": ["team"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/InviteMemberToTenant"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/revoke_invitation/{invitation_id}": {"patch": {"operationId": "revoke_invitation", "summary": "Revoke Invitation", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "invitation_id", "schema": {"title": "Invitation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Cancel pending invitations when plans change or errors occur. Prevents access before\nacceptance and removes from pending lists. Cannot revoke already accepted invitations -\nuse team removal instead. Useful for correcting mistaken invitations or changing\nteam composition plans.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/decline_invitation/{invitation_id}": {"patch": {"operationId": "decline_invitation", "summary": "Decline Invitation", "parameters": [{"in": "path", "name": "invitation_id", "schema": {"title": "Invitation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Allow recipients to decline workspace invitations with optional blocking. Users can\nprevent future invitations from specific workspaces to avoid spam. Declined status\nis visible to workspace administrators for follow-up. Respects user autonomy in\nworkspace participation decisions.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/accept_invitation/{invitation_id}": {"patch": {"operationId": "accept_invitation", "summary": "Accept Invitation", "parameters": [{"in": "path", "name": "invitation_id", "schema": {"title": "Invitation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Process invitation acceptance to grant workspace access immediately. Creates team\nmembership with assigned roles and permissions. For new users, acceptance is\nremembered and applied upon account creation. Triggers onboarding workflows and\nnotification to workspace administrators.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/exclude_from_team/{team_id}": {"delete": {"operationId": "exclude_from_team", "summary": "Exclude From Team", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "team_id", "schema": {"title": "Team Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove team members from workspace permanently when employment ends or access changes.\nPreserves historical records while revoking all access and permissions. Cannot be\nundone - member must be re-invited to regain access. Consider deactivation for\ntemporary suspensions. Affects all workspace resources immediately.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/toggle_team_member_status/{team_id}": {"patch": {"operationId": "toggle_team_member_status", "summary": "Toggle Team Member Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "team_id", "schema": {"title": "Team Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Activate or deactivate team members for temporary access control. Deactivation preserves\nmembership and history while blocking access. Useful for leaves of absence, contractors\nbetween projects, or compliance holds. Reactivation restores previous permissions\ninstantly without re-invitation.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_member/{member_id}": {"patch": {"operationId": "edit_member", "summary": "Edit Member", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update team member workspace-specific settings for accurate tracking and billing.\nConfigure hourly rates for project costing, territories for holiday management,\nand work contact details separate from personal information. Changes apply to\nfuture allocations while preserving historical data.", "tags": ["team"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditMemberPreferences"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/member/{member_id}/misc_preferences": {"patch": {"operationId": "edit_member_misc_preferences", "summary": "Edit Member Misc Preferences", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Configure additional member preferences and workspace-specific customizations.\nManage notification settings, display preferences, and personal workspace\nconfigurations. These settings enhance user experience without affecting\npermissions or access levels.", "tags": ["team"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditMemberMiscPreferences"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_contact/{org_id}": {"post": {"operationId": "add_contact", "summary": "Add Contact", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a contact person at a customer, without access to the app. You need a contact to send a\nproposal, and you can invite contacts to the customer portal later.", "tags": ["team"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddContactToOrg"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_contact/{org_id}/{contact_id}": {"post": {"operationId": "edit_contact", "summary": "Edit Contact", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "contact_id", "schema": {"title": "Contact Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update external contact information when roles or details change. Maintain current\njob titles, phone numbers, and addresses for effective communication. Changes\ndon't affect portal access if already granted. Keep contact records accurate for\nproject assignments and stakeholder management.", "tags": ["team"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditContact"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_contact/{org_id}/{contact_id}": {"delete": {"operationId": "delete_contact", "summary": "Delete Contact", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "contact_id", "schema": {"title": "Contact Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove external contacts when relationships end or contacts become invalid.\nDeletion is permanent and affects project assignments and communication lists.\nPortal access is revoked if previously granted. Consider deactivation for\ntemporary suspensions to preserve historical records.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/invite_contact/{org_id}/{contact_id}": {"post": {"operationId": "invite_contact", "summary": "Invite Contact", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "contact_id", "schema": {"title": "Contact Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Grant customer portal access to external contacts for self-service capabilities.\nEnables clients to view their projects, documents, and reports without full\nsystem access. Portal permissions are restricted to their organization's data.\nSends invitation email with secure authentication link.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/revoke_customerportal_invitation/{org_id}/{invitation_id}": {"delete": {"operationId": "revoke_customerportal_invitation", "summary": "Revoke Customerportal Invitation", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "invitation_id", "schema": {"title": "Invitation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Cancel pending customer portal invitations before acceptance. Prevents unintended\naccess and removes from pending invitation lists. Cannot revoke after acceptance -\nuse contact deletion to remove portal access. Useful for correcting mistakes or\npolicy changes.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resend_customerportal_invitation/{org_id}/{invitation_id}": {"post": {"operationId": "resend_customerportal_invitation", "summary": "Resend Customerportal Invitation", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "invitation_id", "schema": {"title": "Invitation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Resend customer portal invitations when emails are lost or expired. Generates new\ninvitation email with fresh authentication link. Useful for onboarding follow-ups\nor technical issues. Previous invitation remains valid until accepted or revoked.\nTrack invitation history for engagement metrics.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/revoke_customerportal_access/{org_id}/{contact_id}": {"post": {"operationId": "revoke_customerportal_access", "summary": "Revoke Customerportal Access", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "contact_id", "schema": {"title": "Contact Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Revoke customer portal access when contact relationship changes or for security.\nDisconnects user from contact record while preserving historical audit trail.\nAccess is revoked immediately and user receives notification. Contact can be\nre-invited if relationship resumes. Use this instead of deleting contacts who\nhave performed actions in the portal.", "tags": ["team"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/me/permissions/explain": {"get": {"operationId": "my_permissions_explain", "summary": "My Permissions Explain", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MyPermissionsExplain"}}}}}, "description": "See what you can do in this workspace and why. Lists the access your roles\ngrant, the access the credential you are using can actually exercise, and a\nper-feature summary of both. Reports only your own access, never anyone\nelse's. Fields that do not apply to you are left out.", "tags": ["rbac"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/roles": {"get": {"operationId": "tenant_roles", "summary": "Tenant Roles", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by role name or description", "title": "Search"}, "required": false, "description": "Search by role name or description"}, {"in": "query", "name": "name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by role name", "q": "name__icontains", "title": "Name"}, "required": false, "description": "Filter by role name"}, {"in": "query", "name": "description", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by role description", "q": "description__icontains", "title": "Description"}, "required": false, "description": "Filter by role description"}, {"in": "query", "name": "is_active", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter by active/inactive status", "q": "is_active", "title": "Is Active"}, "required": false, "description": "Filter by active/inactive status"}, {"in": "query", "name": "is_default", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter by default role status", "q": "is_default", "title": "Is Default"}, "required": false, "description": "Filter by default role status"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set - match ANY tag in this set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set - match ANY tag in this set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set - match ANY tag in this set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set - match ANY tag in this set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set - match ANY tag in this set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set - match ANY tag in this set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantRoles"}}}}}, "description": "View all security roles defined in your workspace with member counts and descriptions.\nEssential for understanding your permission structure and identifying role gaps.\nShows both system-defined roles and custom roles created for your organization.\nUse to audit role proliferation and consolidate redundant permission sets.\nSupports filtering by name, description, active status, tags, and labels.", "tags": ["rbac"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/role_members/{role_id}": {"get": {"operationId": "tenant_role_members", "summary": "Tenant Role Members", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TeamMembersRole"}}}}}, "description": "List all team members assigned to a specific security role for access auditing.\nCritical for compliance reviews and understanding who has elevated privileges.\nShows direct assignments only - members may have additional permissions through\nother roles. Regular review prevents permission creep and maintains security.", "tags": ["rbac"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/role_permissions/{role_id}": {"get": {"operationId": "tenant_role_permissions", "summary": "Tenant Role Permissions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Permissions"}}}}}, "description": "Examine all permissions granted by a role to understand its access scope. Shows\ngranular permissions for each feature area and data domain. Essential before\nassigning roles to new members or modifying role definitions. Review regularly\nto ensure roles align with job functions and security requirements.", "tags": ["rbac"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/member_permissions/{member_id}": {"get": {"operationId": "tenant_member_permissions", "summary": "Tenant Member Permissions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Permissions"}}}}}, "description": "View consolidated permissions for a team member across all assigned roles. Shows\neffective access rights after role aggregation and inheritance. Critical for\ntroubleshooting access issues and verifying appropriate permissions. Includes\nboth explicit and inherited permissions from role hierarchies.", "tags": ["rbac"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_permission_to_role": {"post": {"operationId": "add_permission_to_role", "summary": "Add Permission To Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Grant additional permissions to a role to expand its access scope. Changes apply\nimmediately to all members assigned to the role. Use caution when adding sensitive\npermissions like data deletion or financial access. Consider creating new roles\ninstead of expanding existing ones to maintain least privilege principle.", "tags": ["rbac"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddPermissionToRole"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_member_to_role": {"post": {"operationId": "add_member_to_role", "summary": "Add Member To Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Assign team members to security roles for systematic access management. Members\nimmediately receive all permissions associated with the role. Multiple role\nassignments are cumulative - permissions aggregate across all assigned roles.\nReview existing permissions before assignment to prevent over-privileging.", "tags": ["rbac"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddMemberToRole"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_role": {"post": {"operationId": "add_role", "summary": "Add Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a role for the people in your workspace. It starts with no permissions: add only the ones\nthe role needs. Name it after the job it is for.", "tags": ["rbac"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddRole"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_role/{role_id}": {"patch": {"operationId": "edit_role", "summary": "Edit Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Modify role properties like name and description for clarity and maintenance.\nDoes not change permissions - use permission management endpoints for access\nchanges. Updates apply to all members immediately. Cannot edit system-defined\nroles that are essential for workspace operation.", "tags": ["rbac"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditRole"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_member_from_role/{role_id}/{member_id}": {"delete": {"operationId": "delete_member_from_role", "summary": "Delete Member From Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove team members from roles when responsibilities change or access is no longer\nrequired. Immediately revokes all permissions granted by the role. Member retains\npermissions from other role assignments. Essential for timely access revocation\nduring role transitions or security incidents.", "tags": ["rbac"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_permission_from_role/{role_id}/{permission_id}": {"delete": {"operationId": "delete_permission_from_role", "summary": "Delete Permission From Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}, {"in": "path", "name": "permission_id", "schema": {"title": "Permission Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Revoke specific permissions from a role to reduce its access scope. Immediately\naffects all members assigned to the role. Use when refining role definitions or\nresponding to security reviews. Consider the impact on daily operations before\nremoving commonly used permissions.", "tags": ["rbac"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_role/{role_id}": {"delete": {"operationId": "delete_role", "summary": "Delete Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete or redundant security roles from your workspace. Cannot delete\nroles with active member assignments - remove members first. System-defined roles\nessential for workspace operation cannot be deleted. Consider archiving instead\nof deleting for audit trail preservation.", "tags": ["rbac"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/feed/{page_number}": {"get": {"operationId": "tenant_feed", "summary": "Tenant Feed", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "page_number", "schema": {"title": "Page Number", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Feed"}}}}}, "description": "Browse the workspace activity stream to stay informed about team activities and\nbusiness events. Paginated results show recent achievements, project milestones,\ncustomer wins, and important updates. Customize feed visibility through workspace\nsettings to highlight what matters most to your team culture.", "tags": ["feed"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/toggle_feed_reaction/{event_id}/{reaction_id}": {"patch": {"operationId": "toggle_feed_reaction", "summary": "Toggle Feed Reaction", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "event_id", "schema": {"title": "Event Id", "type": "string"}, "required": true}, {"in": "path", "name": "reaction_id", "schema": {"title": "Reaction Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Express support, celebrate wins, or acknowledge updates with emoji reactions.\nToggle reactions on and off - adding if not present, removing if already reacted.\nReactions appear instantly to foster real-time team engagement. Multiple reaction\ntypes available to match the sentiment - celebrate, support, acknowledge, or appreciate.", "tags": ["feed"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reactions/{event_id}": {"get": {"operationId": "feed_event_reactions", "summary": "Feed Event Reactions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "event_id", "schema": {"title": "Event Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "See who reacted to specific feed items to understand team engagement and sentiment.\nReturns all reactions grouped by type with reacting team members. Useful for\ngauging team morale, identifying highly engaged members, and understanding which\nactivities resonate with your workspace culture.", "tags": ["feed"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tags": {"get": {"operationId": "tenant_tags", "summary": "Tenant Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantTags"}}}}}, "description": "View all tags in your workspace with usage statistics across entity types.\nShows tag colors for visual identification and counts of tagged items.\nEssential for taxonomy management and understanding categorization patterns.\nReview before creating new tags to avoid duplicates.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_details/{tag_id}": {"get": {"operationId": "tag_details", "summary": "Tag Details", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTagDetails"}}}}}, "description": "Examine detailed tag usage across all entity types with specific counts.\nShows which members, roles, organizations, resources, and proposals use this tag.\nCritical for understanding tag impact before editing or deletion.\nHelps identify over-used or under-utilized categorizations.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_tag": {"post": {"operationId": "add_tag", "summary": "Add Tag", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a tag, with a color that makes it easy to spot in lists and filters. The name must be unique\nin your workspace and short, up to 25 characters.", "tags": ["tags"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddTag"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_tag/{tag_id}": {"patch": {"operationId": "edit_tag", "summary": "Edit Tag", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Update tag properties to improve categorization clarity or visual distinction.\nChanges apply immediately to all tagged entities. Modify colors for better\nvisibility or rename for improved understanding. Consider impact on existing\nfilters and saved views before renaming.", "tags": ["tags"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTag"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_tag/{tag_id}": {"delete": {"operationId": "delete_tag", "summary": "Delete Tag", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete tags from your taxonomy when no longer relevant. Deletion\nremoves the tag from all associated entities permanently. Cannot be undone -\nconsider renaming instead if unsure. Review tag usage before deletion to\nunderstand impact.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_member/{member_id}/{tag_id}": {"post": {"operationId": "tag_member", "summary": "Tag Member", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Categorize team members by skills, departments, roles, or custom attributes.\nTags help identify expertise for project assignments and team composition.\nMultiple tags per member support complex categorizations. Useful for\nresource planning and skill gap analysis.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/member_tags/{member_id}": {"get": {"operationId": "tenant_member_tags", "summary": "Tenant Member Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMemberTags"}}}}}, "description": "View all tags assigned to a team member for skill and attribute visibility.\nShows the complete categorization profile for resource allocation decisions.\nEssential for understanding member capabilities and organizational placement.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_member/{member_id}/{tag_id}": {"delete": {"operationId": "untag_member", "summary": "Untag Member", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove tags from team members when skills or attributes change. Updates\ncategorization to maintain accurate team profiles. Affects resource\nfiltering and skill searches immediately.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_role/{role_id}/{tag_id}": {"post": {"operationId": "tag_role", "summary": "Tag Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Categorize security roles by department, seniority, or functional area.\nTags help organize complex permission structures and identify role patterns.\nUseful for compliance auditing and role lifecycle management.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/role_tags/{role_id}": {"get": {"operationId": "tenant_role_tags", "summary": "Tenant Role Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputRoleTags"}}}}}, "description": "View tags assigned to a security role for categorization understanding.\nShows how roles fit into organizational structure and permission hierarchy.\nEssential for role review and access control documentation.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_role/{role_id}/{tag_id}": {"delete": {"operationId": "untag_role", "summary": "Untag Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove categorization from security roles when organizational structure changes.\nUpdates role classification for accurate permission management. Affects\nrole filtering and grouping in administrative interfaces.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_org/{org_id}/{tag_id}": {"post": {"operationId": "tag_org", "summary": "Tag Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Classify customer organizations by industry, size, priority, or custom segments.\nTags enable customer segmentation for targeted services and reporting.\nMultiple tags support complex customer profiling for sales and support strategies.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_tags/{org_id}": {"get": {"operationId": "org_tags", "summary": "Org Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOrgTags"}}}}}, "description": "View all tags assigned to a customer organization for segmentation visibility.\nShows customer classification for service customization and account management.\nEssential for understanding customer profile and engagement strategy.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_tags_visual/{org_id}": {"get": {"operationId": "org_tags_visual", "summary": "Org Tags Visual", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOrgTags"}}}}}, "description": "Display organization tags with enhanced visual formatting for UI presentation.\nIncludes color coding and styling information for rich user interfaces.\nOptimized for dashboard widgets and customer overview screens.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_org/{org_id}/{tag_id}": {"delete": {"operationId": "untag_org", "summary": "Untag Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove classification tags from organizations when segments or priorities change.\nUpdates customer categorization for accurate targeting and reporting.\nAffects customer filtering and segment analytics immediately.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_resource/{resource_id}/{tag_id}": {"post": {"operationId": "tag_resource", "summary": "Tag Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Categorize resources by type, location, availability, or custom attributes.\nTags help identify resource characteristics for allocation and planning.\nSupports equipment tracking, skill matching, and capacity management.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_tags/{resource_id}": {"get": {"operationId": "resource_tags", "summary": "Resource Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputResourceTags"}}}}}, "description": "View tags assigned to a resource for capability and attribute visibility.\nShows resource classification for allocation decisions and planning.\nEssential for understanding resource characteristics and constraints.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_tags_visual/{resource_id}": {"get": {"operationId": "resource_tags_visual", "summary": "Resource Tags Visual", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputResourceTags"}}}}}, "description": "Display resource tags with visual enhancements for improved UI presentation.\nIncludes styling and color information for resource cards and lists.\nOptimized for resource planning interfaces and allocation screens.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_resource/{resource_id}/{tag_id}": {"delete": {"operationId": "untag_resource", "summary": "Untag Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove categorization from resources when capabilities or attributes change.\nUpdates resource classification for accurate planning and allocation.\nAffects resource filtering and availability searches.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_proposal/{proposal_id}/{tag_id}": {"post": {"operationId": "tag_proposal", "summary": "Tag Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Classify proposals by type, priority, stage, or custom categories.\nTags enable deal segmentation for pipeline analysis and forecasting.\nMultiple tags support complex deal profiling for sales strategies.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_tags/{proposal_id}": {"get": {"operationId": "proposal_tags", "summary": "Proposal Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProposalTags"}}}}}, "description": "View all tags assigned to a proposal for deal categorization visibility.\nShows proposal classification for sales strategy and pipeline management.\nEssential for understanding deal characteristics and requirements.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_tags_visual/{proposal_id}": {"get": {"operationId": "proposal_tags_visual", "summary": "Proposal Tags Visual", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProposalTags"}}}}}, "description": "Display proposal tags with visual formatting for enhanced UI presentation.\nIncludes color and styling for pipeline views and deal cards.\nOptimized for sales dashboards and opportunity management screens.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_proposal/{proposal_id}/{tag_id}": {"delete": {"operationId": "untag_proposal", "summary": "Untag Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove classification from proposals when deal characteristics change.\nUpdates proposal categorization for accurate pipeline analytics.\nAffects deal filtering and sales reporting immediately.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_template_tags/{template_id}": {"get": {"operationId": "work_item_template_tags", "summary": "Work Item Template Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemTemplateTags"}}}}}, "description": "View all tags assigned to a work item template for categorization and filtering.\nShows the complete classification profile for template organization.\nEssential for understanding template purposes and finding relevant templates.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_template_tags_visual/{template_id}": {"get": {"operationId": "work_item_template_tags_visual", "summary": "Work Item Template Tags Visual", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemTemplateTags"}}}}}, "description": "Show a work item template's tags as coloured markers, without the tags still available to\napply. Used in the template page header so its classification is visible at a glance.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_work_item_template/{template_id}/{tag_id}": {"post": {"operationId": "tag_work_item_template", "summary": "Tag Work Item Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Categorize work item templates by type, complexity, industry, or custom attributes.\nTags help identify appropriate templates for project needs.\nMultiple tags per template support complex categorizations.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_work_item_template/{template_id}/{tag_id}": {"delete": {"operationId": "untag_work_item_template", "summary": "Untag Work Item Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove tags from work item templates when categorization changes.\nUpdates template classification to maintain accurate library organization.\nAffects template filtering and discovery immediately.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_tags/{work_item_id}": {"get": {"operationId": "work_item_tags", "summary": "Work Item Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemTags"}}}}}, "description": "View all tags assigned to a work item for categorization and filtering.\nShows the classification profile for tracking and organization.\nWorks for both project and operational work items.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_tags_visual/{work_item_id}": {"get": {"operationId": "work_item_tags_visual", "summary": "Work Item Tags Visual", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemTags"}}}}}, "description": "Display work item tags with visual formatting for enhanced UI presentation.\nIncludes color coding for visual identification in cards and lists.\nOptimized for inline display in work item cards.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_project_work_item/{work_item_id}/{tag_id}": {"post": {"operationId": "tag_project_work_item", "summary": "Tag Project Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Tag a project work item for categorization and tracking.\nTags help identify work item type, priority, complexity, or custom attributes.\nMultiple tags support complex categorizations for project management.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_project_work_item/{work_item_id}/{tag_id}": {"delete": {"operationId": "untag_project_work_item", "summary": "Untag Project Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove tags from project work items when categorization changes.\nUpdates work item classification for accurate project tracking.\nAffects work breakdown structure filtering immediately.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/operational_work_item_tags/{work_item_id}": {"get": {"operationId": "operational_work_item_tags", "summary": "Operational Work Item Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOperationalWorkItemTags"}}}}}, "description": "Show the tags applied to an operational task, and the tags still available to apply.\nTags group tasks by urgency, department or any dimension you choose, so the task list can\nbe sliced without adding fields to the task.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/operational_work_item_tags_visual/{work_item_id}": {"get": {"operationId": "operational_work_item_tags_visual", "summary": "Operational Work Item Tags Visual", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOperationalWorkItemTags"}}}}}, "description": "Show an operational task's tags as coloured markers, without the tags still available to\napply. Used in the task header so its grouping is visible at a glance.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_operational_work_item/{work_item_id}/{tag_id}": {"post": {"operationId": "tag_operational_work_item", "summary": "Tag Operational Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Tag an operational work item for categorization and tracking.\nTags help identify operational task type, urgency, department, or custom attributes.\nMultiple tags support complex categorizations for operations management.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_operational_work_item/{work_item_id}/{tag_id}": {"delete": {"operationId": "untag_operational_work_item", "summary": "Untag Operational Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove tags from operational work items when categorization changes.\nUpdates work item classification for accurate operational tracking.\nAffects task list filtering and reporting immediately.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_tags/{document_id}": {"get": {"operationId": "document_tags", "summary": "Document Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocumentTags"}}}}}, "description": "Show the tags applied to a document, and the tags still available to apply. Tags group\ndocuments by kind, department or confidentiality so the list can be sliced without\nremembering where a file was put.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_tags_visual/{document_id}": {"get": {"operationId": "document_tags_visual", "summary": "Document Tags Visual", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocumentTags"}}}}}, "description": "Show a document's tags as coloured markers, without the tags still available to apply.\nUsed in the document header so its classification is visible at a glance.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_document/{document_id}/{tag_id}": {"post": {"operationId": "tag_document", "summary": "Tag Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Apply a tag to a document. Tagging is additive and reversible, so it is a cheap way to\ngroup paperwork without moving or renaming anything.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_document/{document_id}/{tag_id}": {"delete": {"operationId": "untag_document", "summary": "Untag Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a tag from a document. The document itself is untouched; only the grouping goes.", "tags": ["tags"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/labels": {"get": {"operationId": "tenant_labels", "summary": "Tenant Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantLabels"}}}}}, "description": "View all available labels in your workspace taxonomy. Returns the complete label\nlibrary with descriptions for consistent application. Essential for understanding\nyour classification system and training new team members. Monitor label proliferation\nto maintain a manageable taxonomy.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_label": {"post": {"operationId": "add_label", "summary": "Add Label", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a label to classify records, holding text, a number or a date. You can put labels on team\nmembers, customers, proposals, work items, resources and other records. The name must be unique\nin your workspace.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabel"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_label/{label_id}": {"patch": {"operationId": "edit_label", "summary": "Edit Label", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Refine label properties when classification needs change or to improve clarity.\nUpdates apply retroactively to all labeled entities maintaining consistency. Useful\nfor correcting typos or clarifying descriptions. Changes propagate immediately\nacross all views and reports.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditLabel"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_label/{label_id}": {"delete": {"operationId": "delete_label", "summary": "Delete Label", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete labels to maintain a clean taxonomy. Deletion removes the label from\nall entities - there's no undo. Consider merging similar labels before deletion to\npreserve classification intent. Review label usage statistics before removing to\nunderstand impact across your workspace.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_details/{label_id}": {"get": {"operationId": "label_details", "summary": "Label Details", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLabelDetails"}}}}}, "description": "Examine comprehensive label metadata including creation date, usage statistics, and\ncomplete description. Useful for understanding label purpose and adoption patterns.\nReview before editing or deleting to assess workspace-wide impact. Helps identify\nunderutilized or redundant labels for taxonomy optimization.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_cardinality/{label_id}": {"get": {"operationId": "label_cardinality", "summary": "Label Cardinality", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLabelCardinality"}}}}}, "description": "Analyze label distribution across different entity types to understand usage patterns.\nShows counts for members, roles, organizations, resources, and proposals. Essential\nfor impact analysis before label modifications. Identifies cross-functional labels\nthat span multiple entity types versus specialized classifications.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/member_labels/{member_id}": {"get": {"operationId": "tenant_member_labels", "summary": "Tenant Member Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMemberLabels"}}}}}, "description": "View all labels assigned to a team member for skills tracking, role identification,\nor special designations. Useful for finding experts, forming project teams, or\nmanaging permissions. Labels can indicate certifications, departments, seniority\nlevels, or any custom classification relevant to your organization.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_member": {"post": {"operationId": "label_member", "summary": "Label Member", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Classify team members with relevant labels for expertise identification, team formation,\nor access control. Multiple labels create rich profiles for sophisticated filtering.\nConsider using labels for skills, departments, locations, or project assignments.\nChanges affect member visibility in filtered views immediately.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToMember"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_member/{member_id}/{label_id}": {"delete": {"operationId": "unlabel_member", "summary": "Unlabel Member", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove labels from team members when roles change, projects end, or classifications\nno longer apply. Updates filtered views and reports immediately. Consider the impact\non automated workflows or permission rules based on labels. No notification is sent\nto the affected member.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/role_labels/{role_id}": {"get": {"operationId": "tenant_role_labels", "summary": "Tenant Role Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputRoleLabels"}}}}}, "description": "Examine labels applied to security roles for categorization and documentation.\nUseful for understanding role purposes, compliance mappings, or inheritance patterns.\nLabels can indicate role criticality, department alignment, or regulatory requirements.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_role": {"post": {"operationId": "label_role", "summary": "Label Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Tag security roles with labels for governance, compliance tracking, or organizational\nstructure. Useful for identifying high-privilege roles, department-specific permissions,\nor roles requiring periodic review. Labels help manage complex permission hierarchies\nand audit requirements.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToRole"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_role/{role_id}/{label_id}": {"delete": {"operationId": "unlabel_role", "summary": "Unlabel Role", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "role_id", "schema": {"title": "Role Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove classification labels from security roles when reorganizing permission\nstructures or updating compliance mappings. Changes don't affect actual permissions,\nonly role categorization. Review dependent automation or reporting before removal.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_labels/{org_id}": {"get": {"operationId": "org_labels", "summary": "Org Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOrgLabels"}}}}}, "description": "View classification labels for an organization to understand its categorization\nwithin your business. Labels indicate industry, size, priority, lifecycle stage,\nor custom segments. Essential for sales targeting, service delivery, and reporting.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_org": {"post": {"operationId": "label_org", "summary": "Label Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Classify organizations for segmentation, targeting, and customized service delivery.\nApply labels for industry verticals, customer tiers, geographic regions, or account\nstatus. Multiple labels enable sophisticated filtering for sales campaigns, support\nprioritization, or compliance requirements.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToOrg"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_org/{org_id}/{label_id}": {"delete": {"operationId": "unlabel_org", "summary": "Unlabel Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove organizational classifications when relationships change, segments are\nredefined, or labels become obsolete. Affects organization visibility in filtered\nviews and segment reports. Consider impact on automated workflows, SLAs, or\npricing rules based on organization labels.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_labels/{resource_id}": {"get": {"operationId": "resource_labels", "summary": "Resource Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputResourceLabels"}}}}}, "description": "View labels categorizing a resource for inventory management, capability tracking,\nor maintenance scheduling. Labels can indicate resource type, location, condition,\ncertification status, or availability restrictions.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_resource": {"post": {"operationId": "label_resource", "summary": "Label Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Tag resources with classification labels for inventory control, maintenance tracking,\nor capability management. Use labels for equipment types, locations, certifications,\nor special handling requirements. Enables sophisticated resource allocation and\nutilization reporting.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToResource"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_resource/{resource_id}/{label_id}": {"delete": {"operationId": "unlabel_resource", "summary": "Unlabel Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove resource classifications when capabilities change, certifications expire,\nor categorization updates. Affects resource discovery in searches and allocation\nalgorithms. Review scheduling rules or maintenance workflows dependent on resource\nlabels before removal.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_labels/{proposal_id}": {"get": {"operationId": "proposal_labels", "summary": "Proposal Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProposalLabels"}}}}}, "description": "View labels classifying a proposal for pipeline management, win/loss analysis,\nor strategic tracking. Labels indicate deal size, probability, competition level,\nstrategic importance, or custom sales stages.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_proposal": {"post": {"operationId": "label_proposal", "summary": "Label Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Classify proposals for sophisticated pipeline management and forecasting. Apply\nlabels for deal characteristics, strategic importance, risk levels, or custom\nsales methodologies. Enables advanced analytics on win rates, cycle times, and\nconversion patterns by segment.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToProposal"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_proposal/{proposal_id}/{label_id}": {"delete": {"operationId": "unlabel_proposal", "summary": "Unlabel Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove proposal classifications when deal characteristics change or stages advance.\nUpdates pipeline reports and forecasts immediately. Consider impact on sales\nautomation, approval workflows, or commission calculations based on proposal labels.\nHistorical analytics preserve the label history for trend analysis.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_labels/{work_item_id}": {"get": {"operationId": "work_item_labels", "summary": "Work Item Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemLabels"}}}}}, "description": "View all labels assigned to a work item for categorization and metadata.\nShows work item characteristics like priority, phase, complexity, or deliverable type.\nEssential for work breakdown structure organization and project management.\nWorks for both project and operational work items.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_project_work_item": {"post": {"operationId": "label_project_work_item", "summary": "Label Project Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Classify PROJECT work items with metadata for better organization and tracking.\nApply labels like \"phase:design\", \"complexity:high\", or \"deliverable:documentation\"\nto enable sophisticated filtering and reporting. Updates project dashboards and\nresource allocation views immediately.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToWorkItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_project_work_item/{work_item_id}/{label_id}": {"delete": {"operationId": "unlabel_project_work_item", "summary": "Unlabel Project Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove PROJECT work item classifications when task characteristics change or phases advance.\nUpdates project reports and resource allocation immediately. Consider impact on\nproject automation, approval workflows, or progress tracking based on work item labels.\nHistorical analytics preserve the label history for trend analysis.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_operational_work_item": {"post": {"operationId": "label_operational_work_item", "summary": "Label Operational Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Classify OPERATIONAL work items with metadata for better organization and tracking.\nApply labels like \"priority:urgent\", \"department:it\", or \"type:maintenance\"\nto enable sophisticated filtering and reporting. Updates operational dashboards and\nresource allocation views immediately.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToOperationalWorkItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_operational_work_item/{work_item_id}/{label_id}": {"delete": {"operationId": "unlabel_operational_work_item", "summary": "Unlabel Operational Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove OPERATIONAL work item classifications when task characteristics change or priorities shift.\nUpdates operational reports and resource allocation immediately. Consider impact on\noperational automation, approval workflows, or SLA tracking based on work item labels.\nHistorical analytics preserve the label history for trend analysis.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_template_labels/{template_id}": {"get": {"operationId": "work_item_template_labels", "summary": "Work Item Template Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemTemplateLabels"}}}}}, "description": "View all labels assigned to a work item template for categorization and metadata.\nShows template characteristics like complexity level, industry focus, or compliance\nrequirements. Essential for template discovery and selection in project planning.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_work_item_template": {"post": {"operationId": "label_work_item_template", "summary": "Label Work Item Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Classify work item templates with metadata for better organization and discovery.\nApply labels for template characteristics like effort level, deliverable type,\nor required skills. Enables sophisticated template selection based on project needs.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToWorkItemTemplate"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_work_item_template/{template_id}/{label_id}": {"delete": {"operationId": "unlabel_work_item_template", "summary": "Unlabel Work Item Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove labels from work item templates when classification changes or templates\nare updated. Maintains accurate template library organization. Affects template\ndiscovery and selection in project planning immediately.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/operational_work_item_labels/{operational_work_item_id}": {"get": {"operationId": "operational_work_item_labels", "summary": "Operational Work Item Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "operational_work_item_id", "schema": {"title": "Operational Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOperationalWorkItemLabels"}}}}}, "description": "Show the labels applied to an operational task with their values. Unlike tags, a label\ncarries a typed value (text, number or date), so it can record an estimate, a due date or\na cost code.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_labels/{document_id}": {"get": {"operationId": "document_labels", "summary": "Document Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocumentLabels"}}}}}, "description": "Show the labels applied to a document with their values. Unlike tags, a label carries a\ntyped value, so it can record a review date, a contract value or a reference code.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_document": {"post": {"operationId": "label_document", "summary": "Label Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Apply a label and its value to a document. Re-applying the same label overwrites its\nvalue, so this doubles as the edit path. Labels make documents filterable by data rather\nthan by name.", "tags": ["labels"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLabelToDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_document/{document_id}/{label_id}": {"delete": {"operationId": "unlabel_document", "summary": "Unlabel Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a label from a document, discarding the value stored against it. The document\nitself is untouched.", "tags": ["labels"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automations": {"get": {"operationId": "tenant_automations", "summary": "Tenant Automations", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantAutomations"}}}}}, "description": "List all automation rules in your workspace to review and manage workflow rules.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_events": {"get": {"operationId": "automation_events", "summary": "Automation Events", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AutomationEvents"}}}}}, "description": "Discover which business events can trigger automations in your workspace.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_actions": {"get": {"operationId": "automation_actions", "summary": "Automation Actions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "event", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Event"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AutomationActionsResponse"}}}}}, "description": "List available automation actions from the registry.\nOptionally pass ?event=triggerName to get template variables for that trigger.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_filters": {"post": {"operationId": "automation_filters", "summary": "Automation Filters", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AutomationFiltersResponse"}}}}}, "description": "Get available filter conditions for a specific automation trigger.", "tags": ["automation"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AutomationEventFilters"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_action_conditions": {"post": {"operationId": "automation_action_conditions", "summary": "Automation Action Conditions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AutomationConditionFiltersResponse"}}}}}, "description": "Get available condition fields and operators for an action in the pipeline.\nSame structure as trigger filters so the template is a carbon copy.", "tags": ["automation"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AutomationActionConditionInput"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_create": {"post": {"operationId": "automation_create", "summary": "Automation Create", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a new automation rule.", "tags": ["automation"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/NewAutomation"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_update/{automation_id}": {"patch": {"operationId": "automation_update", "summary": "Automation Update", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "automation_id", "schema": {"title": "Automation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update an existing automation rule.", "tags": ["automation"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditAutomation"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_pause/{automation_id}": {"post": {"operationId": "automation_pause", "summary": "Automation Pause", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "automation_id", "schema": {"title": "Automation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Pause an automation rule.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_resume/{automation_id}": {"post": {"operationId": "automation_resume", "summary": "Automation Resume", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "automation_id", "schema": {"title": "Automation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Resume a paused automation rule.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_delete/{automation_id}": {"delete": {"operationId": "automation_delete", "summary": "Automation Delete", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "automation_id", "schema": {"title": "Automation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete an automation rule.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_executions/{automation_id}": {"get": {"operationId": "automation_executions", "summary": "Automation Executions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "automation_id", "schema": {"title": "Automation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AutomationExecutions"}}}}}, "description": "View execution history for an automation rule.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_action_output_fields/{action_type}": {"get": {"operationId": "automation_action_output_fields", "summary": "Automation Action Output Fields", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "action_type", "schema": {"title": "Action Type", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputActionOutputFields"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get available output fields for an action type. Used by the UI to populate\ncondition builders and template variable pickers for downstream actions.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/automation_pipeline_variables/{rule_id}/{action_id}": {"get": {"operationId": "automation_pipeline_variables", "summary": "Automation Pipeline Variables", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rule_id", "schema": {"title": "Rule Id", "type": "string"}, "required": true}, {"in": "path", "name": "action_id", "schema": {"title": "Action Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get all variables available at a given action's position in the pipeline.\nIncludes event variables, trigger state, and output fields from preceding actions.", "tags": ["automation"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reorder_automation_actions/{rule_id}": {"patch": {"operationId": "reorder_automation_actions", "summary": "Reorder Automation Actions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rule_id", "schema": {"title": "Rule Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reorder actions within an automation rule.", "tags": ["automation"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReorderActions"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tenant_orgs": {"get": {"operationId": "tenant_orgs", "summary": "Tenant Orgs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by organization name or path name", "title": "Search"}, "required": false, "description": "Search by organization name or path name"}, {"in": "query", "name": "name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by organization name", "q": "name__icontains", "title": "Name"}, "required": false, "description": "Filter by organization name"}, {"in": "query", "name": "path_name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by URL path name", "q": "path_name__icontains", "title": "Path Name"}, "required": false, "description": "Filter by URL path name"}, {"in": "query", "name": "is_active", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter by active/inactive status", "q": "is_active", "title": "Is Active"}, "required": false, "description": "Filter by active/inactive status"}, {"in": "query", "name": "my_orgs", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter to show only organizations I manage", "title": "My Orgs"}, "required": false, "description": "Filter to show only organizations I manage"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set - match ANY tag in this set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set - match ANY tag in this set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set - match ANY tag in this set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set - match ANY tag in this set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set - match ANY tag in this set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set - match ANY tag in this set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantOrgs"}}}}}, "description": "List all organizations (customers, subsidiaries) within your workspace with advanced\nfiltering capabilities. Search by name, filter by tags and labels, or find organizations\nmanaged by specific team members. Supports complex filtering with multiple tag and label\nsets for precise organizational segmentation. Essential for account management, reporting,\nand operational oversight across your customer base.", "tags": ["orgs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_details/{subtenant_id}": {"get": {"operationId": "subtenant_info", "summary": "Subtenant Info", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubtenantInfo"}}}}}, "description": "Access core organizational information including timezone, currency, and management\nstructure. Essential for understanding customer configuration and operational parameters.\nShows localization settings that affect all transactions and reporting. Manager\nassignment indicates primary point of contact for account management.", "tags": ["orgs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_legal_info/{subtenant_id}": {"get": {"operationId": "subtenant_legal_info", "summary": "Subtenant Legal Info", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubtenantLegalInfo"}}}}}, "description": "Retrieve legal entity information required for contracts, invoicing, and compliance.\nIncludes registration numbers, tax identifiers, and jurisdiction details. Critical\nfor proper invoice generation and regulatory reporting. Maintain accuracy to avoid\ncompliance issues and payment delays.", "tags": ["orgs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/import_orgs_preview": {"post": {"operationId": "import_orgs_preview", "summary": "Import Orgs Preview", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCsvImportPreview"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "413": {"description": "Content Too Large", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Check a CSV of customers without writing anything. Shows, row by row, what would be added, what\nwould change and what is wrong, and returns an upload token for import_orgs.", "tags": ["orgs"], "requestBody": {"content": {"multipart/form-data": {"schema": {"title": "MultiPartBodyParams", "type": "object", "properties": {"upload_token": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Upload Token"}, "file": {"format": "binary", "title": "File", "type": "string"}}, "required": ["file"]}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/import_orgs": {"post": {"operationId": "import_orgs", "summary": "Import Orgs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCsvImportSummary"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "413": {"description": "Content Too Large", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Import customers from a CSV, or from the upload token of a preview. A row matches a customer by\ntax ID, or by a name only one customer has, and an empty cell keeps the stored value; any other\nrow adds a customer, with its legal details and one contact. Rows with errors are skipped.", "tags": ["orgs"], "requestBody": {"content": {"multipart/form-data": {"schema": {"title": "MultiPartBodyParams", "type": "object", "properties": {"upload_token": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Upload Token"}, "file": {"format": "binary", "title": "File", "type": "string"}}}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/orgs_import_template": {"get": {"operationId": "orgs_import_template", "summary": "Orgs Import Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download a CSV with the customer import's columns and two example rows, to fill in and import.", "tags": ["orgs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/export_orgs": {"get": {"operationId": "export_orgs", "summary": "Export Orgs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download every customer as a CSV, with its legal details and first contact, in the format the\nimport reads back unchanged. Each export is recorded with the number of customers.", "tags": ["orgs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_org": {"post": {"operationId": "add_subtenant", "summary": "Add Subtenant", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a customer organization. It gets your workspace's portal settings and the default price list\nfor new customers. Its currency needs an exchange rate; the account manager you choose is\nnotified.", "tags": ["orgs"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddSubtenant"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_org/{subtenant_id}": {"patch": {"operationId": "edit_subtenant", "summary": "Edit Subtenant", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Update organizational details when business structures change or errors need correction.\nModify timezone and currency settings with caution as they affect financial calculations\nand scheduling. Manager changes update account ownership for relationship continuity.\nChanges apply to future operations while preserving historical data accuracy.", "tags": ["orgs"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditSubtenant"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_subtenant_legal_info/{subtenant_id}": {"patch": {"operationId": "edit_subtenant_legal_info", "summary": "Edit Subtenant Legal Info", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Maintain current legal entity information for compliance and invoicing accuracy.\nUpdate registration numbers, tax identifiers, or addresses when corporate changes occur.\nCritical for maintaining valid invoices and avoiding tax complications. Document\nchanges for audit purposes and notify accounting of significant modifications.", "tags": ["orgs"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditSubtenantLegalInfo"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_org/{subtenant_id}": {"delete": {"operationId": "delete_subtenant", "summary": "Delete Subtenant", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove organizations when relationships end or structures consolidate. Deletion is\npermanent and removes all associated data including users, transactions, and history.\nCannot be undone - export critical data before deletion. Consider deactivation instead\nof deletion to preserve audit trails and historical reporting.", "tags": ["orgs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_availability/": {"get": {"operationId": "my_availability", "summary": "My Availability", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MemberAvailability"}}}}}, "description": "View your personal weekly schedule with timezone adjustments. Shows your standard\nworking hours for each day, helping teammates know when you're available for\nmeetings and collaboration. The display adapts to both your timezone and the\nviewer's timezone for clarity.", "tags": ["capacity"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_availability/{resource_id}": {"get": {"operationId": "resource_availability", "summary": "Resource Availability", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceAvailability"}}}}}, "description": "Check when equipment, rooms, or other resources are available for booking.\nEssential for planning meetings, scheduling equipment maintenance, or reserving\nfacilities. Shows the standard availability pattern before accounting for\nexisting reservations.", "tags": ["capacity"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/member_availability/{member_id}": {"get": {"operationId": "member_availability", "summary": "Member Availability", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MemberAvailability"}}}}}, "description": "View a team member's weekly availability to coordinate schedules and plan\ncollaborative work. Displays working hours adjusted for timezone differences,\nmaking it easy to find overlapping availability for global teams.", "tags": ["capacity"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_member_availability": {"post": {"operationId": "add_member_availability", "summary": "Add Member Availability", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Set your standard working hours for a specific day of the week. Define when\nyou're typically available for meetings and project work. Changes immediately\naffect how others see your availability when scheduling. Only one time block\nper day is currently supported.", "tags": ["capacity"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddAvailability"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_resource_availability/{resource_id}": {"post": {"operationId": "add_resource_availability", "summary": "Add Resource Availability", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Define when resources are available for booking. Set operating hours for meeting\nrooms, maintenance windows for equipment, or availability patterns for shared\nfacilities. This baseline schedule helps prevent booking conflicts and optimizes\nresource utilization.", "tags": ["capacity"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddAvailability"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_member_availability/{availability_id}": {"delete": {"operationId": "delete_member_availability", "summary": "Delete Member Availability", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "availability_id", "schema": {"title": "Availability Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove availability for a specific day, marking yourself as unavailable.\nUse when your schedule changes permanently for certain days. This affects\nall future scheduling - existing bookings remain unchanged. Consider updating\nrather than deleting if you're changing hours.", "tags": ["capacity"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_resource_availability/{resource_id}/{availability_id}": {"delete": {"operationId": "delete_resource_availability", "summary": "Delete Resource Availability", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}, {"in": "path", "name": "availability_id", "schema": {"title": "Availability Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Mark a resource as unavailable for a specific day of the week. Use for\nregular maintenance days, facility closures, or when resources are permanently\nunavailable on certain days. Prevents new bookings but doesn't affect existing\nreservations.", "tags": ["capacity"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/wbsconfigurations": {"get": {"operationId": "tenant_wbsconfigurations", "summary": "Tenant Wbsconfigurations", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantWBSConfigurations"}}}}}, "description": "View all available project breakdown methodologies in your workspace. Shows active\nand inactive configurations with rule counts for complexity assessment. Essential\nfor selecting appropriate structures for new projects and understanding organizational\nstandards. Review configurations before project initiation to ensure proper decomposition.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_wbs_configuration": {"post": {"operationId": "add_wbs_configuration", "summary": "Add Wbs Configuration", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a work breakdown configuration: the rules that say which work item types can sit under\nwhich. It starts empty; add rules, then make it active.", "tags": ["work"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWBSConfiguration"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_wbs_configuration/{wbs_configuration_id}": {"patch": {"operationId": "edit_wbs_configuration", "summary": "Edit Wbs Configuration", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "wbs_configuration_id", "schema": {"title": "Wbs Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update configuration metadata when methodologies evolve or naming conventions change.\nActivate or deactivate configurations based on current needs without losing definitions.\nChanges don't affect existing projects using the configuration. Deactivation prevents\nselection for new projects while preserving historical structure integrity.", "tags": ["work"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWBSConfiguration"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_wbs_configuration/{wbs_configuration_id}": {"delete": {"operationId": "delete_wbs_configuration", "summary": "Delete Wbs Configuration", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "wbs_configuration_id", "schema": {"title": "Wbs Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete project methodologies when no longer relevant to your operations.\nCannot delete configurations actively used by projects - ensures structural consistency.\nConsider deactivation instead of deletion to preserve methodology history. Deletion\nis permanent and removes all associated rules.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/wbs_configuration_rules/{wbs_configuration_id}": {"get": {"operationId": "tenant_wbs_configuration_rules", "summary": "Tenant Wbs Configuration Rules", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "wbs_configuration_id", "schema": {"title": "Wbs Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWBSConfigurationRules"}}}}}, "description": "Examine the structural rules defining valid work item relationships in a configuration.\nShows which item types can contain other types, preventing illogical hierarchies\nlike tasks containing deliverables. Essential for training project managers on proper\ndecomposition and troubleshooting structure violations. Rules enforce consistency\nacross all projects using the configuration.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/wbs_configuration_templates/{wbs_configuration_id}": {"get": {"operationId": "wbs_configuration_templates", "summary": "Wbs Configuration Templates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "wbs_configuration_id", "schema": {"title": "Wbs Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WBSConfigurationTemplates"}}}}}, "description": "Retrieve all root-level work item templates using this WBS Configuration. These templates\nfollow the structural rules defined in this configuration and can serve as standardized\nstarting points for new projects. Only top-level templates are shown - their child templates\nare managed within the template hierarchy. Both active and inactive templates are displayed.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_wbs_configuration_rule/{wbs_configuration_id}/{rule_id}": {"delete": {"operationId": "delete_wbs_configuration_rule", "summary": "Delete Wbs Configuration Rule", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "wbs_configuration_id", "schema": {"title": "Wbs Configuration Id", "type": "string"}, "required": true}, {"in": "path", "name": "rule_id", "schema": {"title": "Rule Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove structural rules to simplify project hierarchies or correct configuration errors.\nDeletion affects only new project structures - existing projects maintain their\ncurrent breakdown. Cannot delete rules actively enforcing project structures.\nReview impact on project templates before removing rules.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_wbs_configuration_rule/{wbs_configuration_id}": {"post": {"operationId": "add_wbs_configuration_rule", "summary": "Add Wbs Configuration Rule", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "wbs_configuration_id", "schema": {"title": "Wbs Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Define new parent-child relationships to expand project decomposition options.\nEach rule specifies one allowed relationship, like deliverables containing activities\nor work packages containing tasks. Build complete methodologies by adding multiple\nrules. Duplicate rules are prevented automatically. Consider logical flow and\nreporting needs when designing hierarchies.", "tags": ["work"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWBSRuleToWBSConfiguration"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_templates": {"get": {"operationId": "work_templates", "summary": "Work Templates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkTemplates"}}}}}, "description": "View all work item templates available in your workspace. Templates provide\nreusable structures for common deliverables, activities, and tasks that can\nbe applied across projects. Shows active templates with their types and\nestimated effort. Essential for standardizing project setup and ensuring\nconsistency across teams.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_item_template": {"post": {"operationId": "add_work_item_template", "summary": "Add Work Item Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a reusable work item template that defines standard project structures.\nSpecify the WBS configuration to enforce structural rules. Templates streamline\nproject setup and ensure consistency across similar work.", "tags": ["work"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkItemTemplate"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_work_item_template/{template_id}": {"patch": {"operationId": "edit_work_item_template", "summary": "Edit Work Item Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update an existing work item template to reflect changes in project standards\nor deliverable specifications. Modify template properties including name, description,\nand estimated hours. Changes affect future template usage but don't impact existing\nwork items created from the template.", "tags": ["work"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWorkItemTemplate"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_item_template/{template_id}": {"delete": {"operationId": "delete_work_item_template", "summary": "Delete Work Item Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}, {"in": "query", "name": "delete_descendants", "schema": {"default": false, "title": "Delete Descendants", "type": "boolean"}, "required": false}, {"in": "query", "name": "reparent_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reparent Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete or unused work item templates from your workspace. Root templates\nalways delete all children. Sub-templates can reparent children or delete them.\nCannot delete templates linked to catalog products. Deletion is permanent and\ncannot be undone.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/product_work_templates/{product_id}": {"get": {"operationId": "product_work_templates", "summary": "Product Work Templates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProductWorkTemplates"}}}}}, "description": "Retrieve all work item templates linked to a specific catalog product. When this product\nis added to a proposal, these templates will be instantiated as work items in the project.\nOnly active templates are returned. Templates provide standardized work breakdown structures\nfor consistent project execution across similar product deliveries.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/link_work_item_template_to_product/{product_id}": {"post": {"operationId": "link_work_item_template_to_product", "summary": "Link Work Item Template To Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Link a work item template to a catalog product. Multiple templates can be linked\nto a single product to create standardized work breakdown structures.", "tags": ["work"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/LinkWorkItemTemplateToProduct"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlink_work_item_template_from_product/{product_id}/{template_id}": {"delete": {"operationId": "unlink_work_item_template_from_product", "summary": "Unlink Work Item Template From Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove the link between a work item template and a catalog product. The template remains\navailable for use with other products. This action does not affect existing projects\nthat were created using this template.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/template_linked_products/{template_id}": {"get": {"operationId": "template_linked_products", "summary": "Template Linked Products", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TemplateLinkedProducts"}}}}}, "description": "View all catalog products that are currently using this work item template. Shows active\nand inactive products to help understand template usage across your product catalog.\nEssential for understanding the impact of template modifications.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/template_hierarchy/{template_id}": {"get": {"operationId": "template_hierarchy", "summary": "Template Hierarchy", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTemplateHierarchy"}}}}}, "description": "Get template hierarchy showing the complete work breakdown structure.\nDisplays all subtemplates in a tree view with proper indentation,\nbadges, icons, and descriptions. Essential for visualizing complex\ntemplate structures before instantiation in projects.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_templates/{project_id}": {"get": {"operationId": "project_templates", "summary": "Project Templates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectTemplates"}}}}}, "description": "Get work item templates available for a project, grouped by WBS configuration.\nShows templates matching the project's WBS configuration and general templates\nwithout WBS configuration. Essential for reviewing available templates before\ninstantiating them in the project.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reorder_template_up/{template_id}": {"patch": {"operationId": "reorder_template_up", "summary": "Reorder Template Up", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move template up in the sibling order within its parent.\nChanges the display order of templates at the same hierarchy level.\nUseful for organizing templates in logical execution sequence.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reorder_template_down/{template_id}": {"patch": {"operationId": "reorder_template_down", "summary": "Reorder Template Down", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move template down in the sibling order within its parent.\nChanges the display order of templates at the same hierarchy level.\nUseful for organizing templates in logical execution sequence.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/list_work_item_types": {"get": {"operationId": "list_work_item_types", "summary": "List Work Item Types", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemTypes"}}}}}, "description": "View all work item types available in your workspace. Shows both active and inactive types\nwith their scheduling behavior configuration. Essential for understanding how different\nwork items will behave in project schedules and resource planning.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_item_type": {"post": {"operationId": "add_work_item_type", "summary": "Add Work Item Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a work item type to classify the work in your projects. Its behavior says whether it groups\nother items, is work to do, or is a milestone.", "tags": ["work"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkItemType"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_work_item_type/{type_id}": {"patch": {"operationId": "edit_work_item_type", "summary": "Edit Work Item Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "type_id", "schema": {"title": "Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update an existing work item type to reflect changes in organizational terminology\nor scheduling behavior. Modify type properties including name, description, and active status.\nChanges affect future usage but don't impact existing work items using this type.", "tags": ["work"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWorkItemType"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_item_type/{type_id}": {"delete": {"operationId": "delete_work_item_type", "summary": "Delete Work Item Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "type_id", "schema": {"title": "Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete an obsolete work item type when it's no longer needed. Only types with no\nexisting work items or WBS rule dependencies can be deleted. This prevents breaking\nproject structures that rely on the type. Review usage before deletion.", "tags": ["work"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_worklist": {"get": {"operationId": "tenant_my_worklist", "summary": "Tenant My Worklist", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadBuckets"}}}}}, "description": "Caller's worklist: leads they own, bucketed by overdue/today/untriaged/scheduled.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/all_leads": {"get": {"operationId": "tenant_all_leads", "summary": "Tenant All Leads", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by lead name, company name, or email", "title": "Search"}, "required": false, "description": "Search by lead name, company name, or email"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "status", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "source", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by source", "q": "source", "title": "Source"}, "required": false, "description": "Filter by source"}, {"in": "query", "name": "owner", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by owning team member", "q": "owner__external_id", "title": "Owner"}, "required": false, "description": "Filter by owning team member"}, {"in": "query", "name": "lead_list", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by list assignment", "q": "lead_list__external_id", "title": "Lead List"}, "required": false, "description": "Filter by list assignment"}, {"in": "query", "name": "unclaimed", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Only leads nobody owns that sit in no list", "title": "Unclaimed"}, "required": false, "description": "Only leads nobody owns that sit in no list"}, {"in": "query", "name": "has_email", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Only leads with an email address", "title": "Has Email"}, "required": false, "description": "Only leads with an email address"}, {"in": "query", "name": "has_phone", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Only leads with a phone number", "title": "Has Phone"}, "required": false, "description": "Only leads with a phone number"}, {"in": "query", "name": "next_action_window", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Worklist bucket: overdue / today / scheduled / none", "title": "Next Action Window"}, "required": false, "description": "Worklist bucket: overdue / today / scheduled / none"}, {"in": "query", "name": "country", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by country (ISO alpha-2 code, or the country name)", "title": "Country"}, "required": false, "description": "Filter by country (ISO alpha-2 code, or the country name)"}, {"in": "query", "name": "score_min", "schema": {"anyOf": [{"maximum": 100, "minimum": 0, "type": "integer"}, {"type": "null"}], "description": "Minimum score", "title": "Score Min"}, "required": false, "description": "Minimum score"}, {"in": "query", "name": "score_max", "schema": {"anyOf": [{"maximum": 100, "minimum": 0, "type": "integer"}, {"type": "null"}], "description": "Maximum score", "title": "Score Max"}, "required": false, "description": "Maximum score"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputAllLeads"}}}}}, "description": "Search and filter the leads that are still in play. Leads you have converted, disqualified\nor marked do not contact are kept in their own tabs and are left out here.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead_lists": {"get": {"operationId": "tenant_lead_lists", "summary": "Tenant Lead Lists", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadListList"}}}}}, "description": "Your lead lists, the ones your colleagues own, and the unclaimed pools. Each list carries a\ncount of the leads in it that are overdue, due today, untriaged, or scheduled.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead_owner_candidates": {"get": {"operationId": "lead_owner_candidates", "summary": "Lead Owner Candidates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadOwnerCandidates"}}}}}, "description": "The people a lead or a lead list can be given to: active members of the workspace who can\nopen leads. The list you see when choosing an owner on the lead form.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead_list/{lead_list_id}": {"get": {"operationId": "tenant_lead_list_detail", "summary": "Tenant Lead List Detail", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_list_id", "schema": {"title": "Lead List Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadBuckets"}}}}}, "description": "The leads inside one list, grouped into overdue, due today, untriaged, and scheduled so you\ncan see what needs working next.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead/{lead_id}": {"get": {"operationId": "tenant_lead", "summary": "Tenant Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLead"}}}}}, "description": "Lead detail page.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead_team_rollup": {"get": {"operationId": "tenant_lead_team_rollup", "summary": "Tenant Lead Team Rollup", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadTeamRollup"}}}}}, "description": "Admin-only per-rep dashboard.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/converted_leads": {"get": {"operationId": "tenant_converted_leads", "summary": "Tenant Converted Leads", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputAllLeads"}}}}}, "description": "The archive of leads that became customers, most recent conversion first, each shown with the\ncustomer organization it turned into. Use it to review where past wins came from.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/abandoned_leads": {"get": {"operationId": "tenant_abandoned_leads", "summary": "Tenant Abandoned Leads", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputAllLeads"}}}}}, "description": "The archive of leads closed as disqualified or do not contact, most recently closed first.\nCheck it before opening fresh outreach to a company someone has already ruled out.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead/{lead_id}/activities/{page_number}": {"get": {"operationId": "tenant_lead_activities", "summary": "Tenant Lead Activities", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}, {"in": "path", "name": "page_number", "schema": {"title": "Page Number", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SalesActivityFeed"}}}}}, "description": "Activity timeline for the Lead detail page. Paginated for revealed-trigger infinite scroll.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/leads_activity_feed/{page_number}": {"get": {"operationId": "tenant_leads_activity_feed", "summary": "Tenant Leads Activity Feed", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "page_number", "schema": {"title": "Page Number", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SalesActivityFeed"}}}}}, "description": "View a unified stream of every recent sales touch across all your leads in one place.\nCalls, emails, meetings, and notes appear newest first with the rep who logged them\nand the lead they relate to. Essential for managers who want a pulse on team activity,\ncatch stalled outreach, and surface coaching moments without opening each lead.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_lead": {"post": {"operationId": "add_lead", "summary": "Add Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLead"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_lead/{lead_id}": {"put": {"operationId": "edit_lead", "summary": "Edit Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditLead"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_lead/{lead_id}": {"delete": {"operationId": "delete_lead", "summary": "Delete Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/log_lead_activity/{lead_id}": {"post": {"operationId": "log_lead_activity", "summary": "Log Lead Activity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/LogLeadActivity"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reschedule_lead/{lead_id}": {"post": {"operationId": "reschedule_lead", "summary": "Reschedule Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RescheduleLead"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/update_lead_status/{lead_id}": {"post": {"operationId": "update_lead_status", "summary": "Update Lead Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateLeadStatus"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/disqualify_lead/{lead_id}": {"post": {"operationId": "disqualify_lead", "summary": "Disqualify Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DisqualifyLead"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_lead_do_not_contact/{lead_id}": {"post": {"operationId": "mark_lead_do_not_contact", "summary": "Mark Lead Do Not Contact", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MarkLeadDoNotContact"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_lead_converted/{lead_id}": {"post": {"operationId": "mark_lead_converted", "summary": "Mark Lead Converted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MarkLeadConverted"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/fast_proposal_options/{lead_id}": {"get": {"operationId": "fast_proposal_options", "summary": "Fast Proposal Options", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFastProposalOptions"}}}}}, "description": "What a fast proposal for this lead needs before it is filled in.\n\nLists the funnel stages the proposal may land in, the workspace currency the amount is in,\nand anything in the workspace setup that would stop the proposal from being created.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/fast_proposal/{lead_id}": {"post": {"operationId": "fast_proposal", "summary": "Fast Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Turn a claimed lead into a priced proposal in one step.\n\nCreates the customer organization, the proposal and its single priced line together, and hands\nthe proposal to whoever claimed the lead. The proposal lands in a stage the deal can be won\nfrom, so the next move closes it.", "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/FastProposal"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reopen_lead/{lead_id}": {"post": {"operationId": "reopen_lead", "summary": "Reopen Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReopenLead"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/claim_lead/{lead_id}": {"post": {"operationId": "claim_lead", "summary": "Claim Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ClaimLead"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/import_leads_preview": {"post": {"operationId": "import_leads_preview", "summary": "Import Leads Preview", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadImportPreview"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["leads"], "requestBody": {"content": {"multipart/form-data": {"schema": {"title": "MultiPartBodyParams", "type": "object", "properties": {"assign_to_list_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Assign To List Id"}, "default_next_action": {"default": "triage_later", "enum": ["today", "tomorrow", "plus_3d", "plus_7d", "plus_30d", "plus_90d", "triage_later"], "title": "Default Next Action", "type": "string"}, "upload_token": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Upload Token"}, "file": {"format": "binary", "title": "File", "type": "string"}}, "required": ["file"]}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/import_leads": {"post": {"operationId": "import_leads", "summary": "Import Leads", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadImportSummary"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Accepts EITHER a file (single-step import) OR an upload_token in metadata\npointing to a cached preview (Confirm-from-preview step). The function\nrejects when neither is present.", "tags": ["leads"], "requestBody": {"content": {"multipart/form-data": {"schema": {"title": "MultiPartBodyParams", "type": "object", "properties": {"assign_to_list_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Assign To List Id"}, "default_next_action": {"default": "triage_later", "enum": ["today", "tomorrow", "plus_3d", "plus_7d", "plus_30d", "plus_90d", "triage_later"], "title": "Default Next Action", "type": "string"}, "upload_token": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Upload Token"}, "file": {"format": "binary", "title": "File", "type": "string"}}}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead_import_template": {"get": {"operationId": "lead_import_template", "summary": "Lead Import Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download a CSV with the lead import's columns and an example row, to fill in and import.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/export_leads": {"get": {"operationId": "export_leads", "summary": "Export Leads", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download every lead as a CSV, in the import's columns followed by status, owner, list and dates.\nLead admins only; each export is recorded with the number of leads.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_lead_list": {"post": {"operationId": "add_lead_list", "summary": "Add Lead List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLeadList"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_lead_list/{lead_list_id}": {"put": {"operationId": "edit_lead_list", "summary": "Edit Lead List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_list_id", "schema": {"title": "Lead List Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditLeadList"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_lead_list/{lead_list_id}": {"delete": {"operationId": "delete_lead_list", "summary": "Delete Lead List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_list_id", "schema": {"title": "Lead List Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Delete a lead list. The leads in it stay in the workspace, in no list.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reassign_lead_list/{lead_list_id}": {"post": {"operationId": "reassign_lead_list", "summary": "Reassign Lead List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_list_id", "schema": {"title": "Lead List Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReassignLeadList"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reassign_leads_in_list/{lead_list_id}": {"post": {"operationId": "reassign_leads_in_list", "summary": "Reassign Leads In List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_list_id", "schema": {"title": "Lead List Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReassignLeadsInList"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead_tags/{lead_id}": {"get": {"operationId": "lead_tags", "summary": "Lead Tags", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadTags"}}}}}, "description": "Show the tags applied to a lead, and the tags still available to apply. Tags group leads\nby any dimension you choose \u2014 campaign, territory, product interest \u2014 so the list can be\nsliced without adding fields to the lead itself.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead_tags_visual/{lead_id}": {"get": {"operationId": "lead_tags_visual", "summary": "Lead Tags Visual", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadTags"}}}}}, "description": "Show a lead's tags as coloured markers, without the tags still available to apply. Used in\nthe lead header so its campaign or territory is visible at a glance.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tag_lead/{lead_id}/{tag_id}": {"post": {"operationId": "tag_lead", "summary": "Tag Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Apply a tag to a lead. Tagging is additive and reversible, so it is a cheap way to mark\nleads for a campaign or a follow-up sweep without changing their status.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/untag_lead/{lead_id}/{tag_id}": {"delete": {"operationId": "untag_lead", "summary": "Untag Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}, {"in": "path", "name": "tag_id", "schema": {"title": "Tag Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a tag from a lead. The lead and its history are untouched; only the grouping goes.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/lead_labels/{lead_id}": {"get": {"operationId": "lead_labels", "summary": "Lead Labels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputLeadLabels"}}}}}, "description": "Show the labels applied to a lead with their values. Unlike tags, a label carries a typed\nvalue (text, number or date), so it can record things like budget, headcount or renewal date.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/label_lead": {"post": {"operationId": "label_lead", "summary": "Label Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Apply a label and its value to a lead. Re-applying the same label overwrites its value,\nso this doubles as the edit path.", "tags": ["leads"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/LabelLeadInput"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unlabel_lead/{lead_id}/{label_id}": {"delete": {"operationId": "unlabel_lead", "summary": "Unlabel Lead", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "lead_id", "schema": {"title": "Lead Id", "type": "string"}, "required": true}, {"in": "path", "name": "label_id", "schema": {"title": "Label Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a label from a lead, discarding the value stored against it.", "tags": ["leads"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/funnelconfigurations": {"get": {"operationId": "tenant_funnelconfigurations", "summary": "Tenant Funnelconfigurations", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantFunnelConfigurations"}}}}}, "description": "View all sales funnel configurations available in your workspace. Each funnel\nrepresents a different sales process for various product lines or customer segments.\nEssential for understanding your sales methodologies and choosing the right process\nfor new opportunities. Shows stage counts and active proposal metrics.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/productlifecycles": {"get": {"operationId": "tenant_productlifecycles", "summary": "Tenant Productlifecycles", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantProductLifecycles"}}}}}, "description": "View all product delivery lifecycle configurations in your workspace. Each lifecycle\nrepresents a workflow for tracking product delivery from start to completion with\ncustom status stages. Use these to manage vendor deliverables and track progress\nthrough various stages of completion, review, and customer acceptance.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_productlifecycle": {"post": {"operationId": "add_productlifecycle", "summary": "Add Productlifecycle", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a product lifecycle, to track the delivery status of products. It starts empty: add its\nstatuses, and choose which ones the customer sees.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddProductLifecycle"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_productlifecycle/{productlifecycle_id}": {"patch": {"operationId": "edit_productlifecycle", "summary": "Edit Productlifecycle", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "productlifecycle_id", "schema": {"title": "Productlifecycle Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Refine product delivery lifecycle definitions as your workflow evolves or requirements change.\nUpdates apply to new product deliveries while existing ones maintain their configuration.\nUseful for adjusting status stages or renaming lifecycles for clarity. Changes don't affect\nhistorical tracking or active product deliveries.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditProductLifecycle"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_productlifecycle/{productlifecycle_id}": {"delete": {"operationId": "delete_productlifecycle", "summary": "Delete Productlifecycle", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "productlifecycle_id", "schema": {"title": "Productlifecycle Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete product lifecycle definitions when no longer needed.\nCannot delete default lifecycles or lifecycles currently in use by catalog items or products.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_funnel_configuration": {"post": {"operationId": "add_funnel_configuration", "summary": "Add Funnel Configuration", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a sales funnel, for a different kind of customer or of sale. It starts empty and inactive:\nadd its stages, then activate it.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddFunnelConfiguration"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_funnel_configuration/{funnel_configuration_id}": {"patch": {"operationId": "edit_funnel_configuration", "summary": "Edit Funnel Configuration", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_configuration_id", "schema": {"title": "Funnel Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Refine sales process definitions as your methodology evolves or market changes.\nUpdates apply to new proposals while existing deals maintain their configuration.\nUseful for adjusting qualification criteria or renaming stages for clarity. Changes\ndon't affect historical reporting or active proposals.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditFunnelConfiguration"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_funnel_configuration/{funnel_configuration_id}": {"delete": {"operationId": "delete_funnel_configuration", "summary": "Delete Funnel Configuration", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_configuration_id", "schema": {"title": "Funnel Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete sales processes when products are discontinued or markets exited.\nCannot delete funnels with active proposals - close or reassign them first.\nHistorical data remains for completed deals. Consider deactivation instead of\ndeletion to preserve configuration history.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/funnel_configuration_stages/{funnel_configuration_id}": {"get": {"operationId": "tenant_funnel_configuration_stages", "summary": "Tenant Funnel Configuration Stages", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_configuration_id", "schema": {"title": "Funnel Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantFunnelConfigurationStages"}}}}}, "description": "Examine the stage progression for a specific sales funnel configuration. Shows\nqualification gates, conversion probabilities, and typical duration for each stage.\nEssential for training sales teams and setting expectations. Stage definitions\ndrive reporting metrics and forecast accuracy.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_funnel_configuration_stage/{funnel_configuration_id}": {"post": {"operationId": "add_funnel_configuration_stage", "summary": "Add Funnel Configuration Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_configuration_id", "schema": {"title": "Funnel Configuration Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Expand sales processes with additional qualification stages for complex sales cycles.\nDefine stage-specific criteria, actions, and exit requirements. More stages provide\ngranular tracking but may slow velocity. Balance visibility needs with process\nefficiency when adding stages.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddStageToFunnelConfiguration"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_funnel_configuration_stage/{funnel_configuration_id}/{stage_id}": {"delete": {"operationId": "delete_funnel_configuration_stage", "summary": "Delete Funnel Configuration Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_configuration_id", "schema": {"title": "Funnel Configuration Id", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove unnecessary stages to streamline sales processes and improve velocity.\nCannot delete stages with active proposals - move them first. Simplifying funnels\ncan accelerate deals but reduces tracking granularity. Historical stage data\nremains for reporting.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_funnel_configuration_stage/{funnel_configuration_id}/{stage_id}": {"patch": {"operationId": "edit_funnel_configuration_stage", "summary": "Edit Funnel Configuration Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_configuration_id", "schema": {"title": "Funnel Configuration Id", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Refine stage definitions, probabilities, and criteria as sales processes mature.\nUpdates help maintain forecast accuracy as conversion patterns change. Modify stage\nnames for clarity or adjust probabilities based on historical data. Changes apply\nto new proposals entering the stage.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditFunnelStage"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/product_lifecycle_stages/{productlifecycle_id}": {"get": {"operationId": "tenant_product_lifecycle_stages", "summary": "Tenant Product Lifecycle Stages", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "productlifecycle_id", "schema": {"title": "Productlifecycle Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantProductLifecycleStages"}}}}}, "description": "Examine the status progression for a specific product lifecycle. Shows\nthe available statuses, their types, and allowed transitions. Essential for\nunderstanding how products move through their lifecycle states.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_product_lifecycle_stage/{productlifecycle_id}": {"post": {"operationId": "add_product_lifecycle_stage", "summary": "Add Product Lifecycle Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "productlifecycle_id", "schema": {"title": "Productlifecycle Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a new status to a product lifecycle. Define the status name, type,\nsequence, and customer visibility. Each status type has predefined transitions\nto control how products move through their lifecycle.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddStageToProductLifecycle"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_product_lifecycle_stage/{productlifecycle_id}/{stage_id}": {"delete": {"operationId": "delete_product_lifecycle_stage", "summary": "Delete Product Lifecycle Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "productlifecycle_id", "schema": {"title": "Productlifecycle Id", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a status from a product lifecycle. Cannot delete statuses that are\ncurrently assigned to products. Simplifying lifecycles can help manage\ncomplexity but reduces tracking granularity.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_product_lifecycle_stage/{productlifecycle_id}/{stage_id}": {"patch": {"operationId": "edit_product_lifecycle_stage", "summary": "Edit Product Lifecycle Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "productlifecycle_id", "schema": {"title": "Productlifecycle Id", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Modify the properties of a product lifecycle status. Update the name, type,\nsequence, or customer visibility. Changes affect how the status appears and\nwhich transitions are allowed.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditProductLifecycleStage"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/funnels": {"get": {"operationId": "tenant_funnels", "summary": "Tenant Funnels", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantFunnels"}}}}}, "description": "Monitor all active sales funnels with pipeline metrics and conversion analytics.\nShows deal flow, stage distribution, and velocity trends across different sales\nprocesses. Essential for sales management and forecasting. Identifies bottlenecks\nand opportunities for coaching interventions.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/funnel/{funnel_id}": {"get": {"operationId": "tenant_funnel", "summary": "Tenant Funnel", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_id", "schema": {"title": "Funnel Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TenantFunnelOverview"}}}}}, "description": "Deep dive into specific funnel performance with stage-by-stage conversion analysis.\nShows deal aging, value distribution, and progression patterns. Critical for\nidentifying process improvements and forecast accuracy. Includes win/loss analytics\nfor continuous methodology refinement.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/sale_activity_types": {"get": {"operationId": "list_sale_activity_types", "summary": "List Sale Activity Types", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSaleActivityTypes"}}}}}, "description": "View the activity types available when logging a sales interaction.\nReturns each type with its category and icon, for activity pickers\nsuch as the mobile log-activity sheet.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_sales_activity": {"post": {"operationId": "add_sales_activity", "summary": "Add Sales Activity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Log a call, a meeting or a note on a customer or a proposal. Activities make up the customer's\nsales history and show when you last talked to them.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddSalesActivity"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_sales_activity/{sales_activity_id}": {"delete": {"operationId": "delete_sales_activity", "summary": "Delete Sales Activity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "sales_activity_id", "schema": {"title": "Sales Activity Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove incorrect or duplicate activity entries to maintain clean deal history.\nUse sparingly as activities form the audit trail for customer relationships.\nDeletion is permanent and cannot be undone, and may affect activity metrics.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_own_sales_activity/{sales_activity_id}": {"delete": {"operationId": "delete_own_sales_activity", "summary": "Delete Own Sales Activity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "sales_activity_id", "schema": {"title": "Sales Activity Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete an activity you logged yourself. Permanently removes the entry from the\ndeal history; deletion cannot be undone. Activities form the audit trail for\ncustomer interactions, so use sparingly. You can only remove activities you\nauthored.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/sales_activities_proposal/{proposal_id}/{page_number}": {"get": {"operationId": "sales_activities_proposal", "summary": "Sales Activities Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}, {"in": "path", "name": "page_number", "schema": {"title": "Page Number", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SalesActivityFeed"}}}}}, "description": "View complete interaction history for a specific proposal including calls, meetings,\nand correspondence. Paginated timeline shows who did what and when for deal\ncontinuity. Essential for deal reviews, handoffs, and understanding customer\nengagement patterns. Newest activities appear first.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/sales_activities_org/{org_id}/{page_number}": {"get": {"operationId": "sales_activities_org", "summary": "Sales Activities Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "page_number", "schema": {"title": "Page Number", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SalesActivityFeed"}}}}}, "description": "Track all sales interactions across an entire customer organization for relationship\nmanagement. Shows activities from all proposals and deals for complete account\nhistory. Critical for identifying cross-sell opportunities and maintaining\nexecutive relationships. Helps avoid duplicate outreach.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_catalog_product": {"post": {"operationId": "add_catalog_product", "summary": "Add Catalog Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add an item to your catalog, with its description, price and default terms, to add it to\nproposals quickly and at a consistent price. A new item starts inactive; activate it to use it.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddCatalogProduct"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_catalog_product/{catalog_id}": {"patch": {"operationId": "edit_catalog_product", "summary": "Edit Catalog Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "catalog_id", "schema": {"title": "Catalog Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Change an item's description, price, terms, stock or portal availability. Proposals that already\nhave the item keep their own copy.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditCatalogProduct"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/import_catalog_preview": {"post": {"operationId": "import_catalog_preview", "summary": "Import Catalog Preview", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCsvImportPreview"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "413": {"description": "Content Too Large", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Check a CSV of catalog items without writing anything. Shows, row by row, what would be created,\nwhat would change and what is wrong, and returns an upload token for import_catalog.", "tags": ["proposals"], "requestBody": {"content": {"multipart/form-data": {"schema": {"title": "MultiPartBodyParams", "type": "object", "properties": {"make_new_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Make New Active"}, "upload_token": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Upload Token"}, "file": {"format": "binary", "title": "File", "type": "string"}}, "required": ["file"]}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/import_catalog": {"post": {"operationId": "import_catalog", "summary": "Import Catalog", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCsvImportSummary"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "413": {"description": "Content Too Large", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Import catalog items from a CSV, or from the upload token of a preview. A row whose internal code\nmatches an item updates it, and an empty cell keeps the stored value; any other row adds an item.\nRows with errors are skipped and listed.", "tags": ["proposals"], "requestBody": {"content": {"multipart/form-data": {"schema": {"title": "MultiPartBodyParams", "type": "object", "properties": {"make_new_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Make New Active"}, "upload_token": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Upload Token"}, "file": {"format": "binary", "title": "File", "type": "string"}}}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/catalog_import_template": {"get": {"operationId": "catalog_import_template", "summary": "Catalog Import Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download a CSV with the catalog import's columns and two example rows, to fill in and import.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/export_catalog": {"get": {"operationId": "export_catalog", "summary": "Export Catalog", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download the whole catalog as a CSV, with costs, in the format the import reads back unchanged.\nEdit it in a spreadsheet and import it to change many items at once.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_catalog_product/{catalog_id}": {"delete": {"operationId": "delete_catalog_product", "summary": "Delete Catalog Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "catalog_id", "schema": {"title": "Catalog Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a catalog item no proposal or project uses. An item already used cannot be deleted: make\nit inactive instead, so it no longer shows in new proposals.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/catalog_products/{pricing_type}": {"get": {"operationId": "catalog_products", "summary": "Catalog Products", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "pricing_type", "schema": {"title": "Pricing Type", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CatalogProducts"}}}}}, "description": "Browse available products filtered by pricing model (fixed, hourly, subscription).\nEssential for building proposals with appropriate product mix. Shows product\ndetails, standard pricing, and availability. Organized for quick selection during\nproposal creation.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/funnel/{funnel_id}/won_proposals": {"get": {"operationId": "funnel_won_proposals", "summary": "Funnel Won Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_id", "schema": {"title": "Funnel Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FunnelWonProposals"}}}}}, "description": "Analyze successful deals to understand winning patterns and best practices. Shows\nconversion timelines, deal sizes, and success factors for replication. Essential\nfor sales training and playbook development. Use insights to focus on similar\nopportunities with higher win probability.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/funnel/{funnel_id}/lost_proposals": {"get": {"operationId": "funnel_lost_proposals", "summary": "Funnel Lost Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "funnel_id", "schema": {"title": "Funnel Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FunnelLostProposals"}}}}}, "description": "Study lost opportunities to identify improvement areas and competitive weaknesses.\nCategorizes losses by reason, competitor, and stage for pattern recognition.\nCritical for refining value propositions and addressing objections. Regular review\nprevents repeat mistakes and improves win rates.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/catalog_top_selling_products": {"get": {"operationId": "catalog_top_selling_products", "summary": "Catalog Top Selling Products", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTopSellingProducts"}}}}}, "description": "Identify best-performing products by revenue and unit volume for inventory and\nmarketing focus. Shows which offerings resonate with customers and drive growth.\nEssential for product strategy and sales enablement. Use to prioritize product\ndevelopment and promotional efforts.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/catalog_total_products_sold": {"get": {"operationId": "catalog_total_products_sold", "summary": "Catalog Total Products Sold", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTotalProductsSold"}}}}}, "description": "Track overall product sales volume and revenue contribution across your catalog.\nProvides macro view of product mix and business composition. Critical for\nunderstanding revenue concentration and diversification needs. Helps identify\ndeclining products requiring refresh or retirement.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/product_details/{product_id}": {"get": {"operationId": "product_details", "summary": "Product Details", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProductDetails"}}}}}, "description": "Examine comprehensive product performance including sales history, customer segments,\nand profitability metrics. Shows adoption trends and competitive positioning.\nEssential for product lifecycle management and pricing decisions. Includes customer\nfeedback and satisfaction metrics when available.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_price_list": {"post": {"operationId": "add_price_list", "summary": "Add Price List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a price list: a selection of catalog items for the customers and partners you give it to.\nThey see only the items in their price lists that are available in their portal.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddPriceList"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_price_list/{price_list_id}": {"patch": {"operationId": "edit_price_list", "summary": "Edit Price List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "price_list_id", "schema": {"title": "Price List Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Rename, describe, deactivate or reactivate a price list.\nReactivating is refused when one of its custom prices would give an item a second price.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditPriceList"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_price_list/{price_list_id}": {"delete": {"operationId": "delete_price_list", "summary": "Delete Price List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "price_list_id", "schema": {"title": "Price List Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a price list. Those who held it no longer see its items; records already sent keep their prices.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_price_list_items/{price_list_id}": {"put": {"operationId": "edit_price_list_items", "summary": "Edit Price List Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "price_list_id", "schema": {"title": "Price List Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Set a price list's items, each at its catalog price or at a custom price.\nAn item can have a custom price in only one of the price lists a customer or partner holds.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditPriceListItems"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/set_org_price_lists/{subtenant_id}": {"put": {"operationId": "set_org_price_lists", "summary": "Set Org Price Lists", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Give a customer organization its price lists, as a whole: it sees only their items in the customer portal.\nRefused when an item would get a custom price from more than one of them.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetPriceLists"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/set_bridge_price_lists/{bridge_id}": {"put": {"operationId": "set_bridge_price_lists", "summary": "Set Bridge Price Lists", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Give a partnership your price lists, as a whole: the partner sees only their items in the partner portal.\nRefused when an item would get a custom price from more than one of them.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetPriceLists"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/target_schemes": {"get": {"operationId": "tenant_target_schemes", "summary": "Tenant Target Schemes", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTargetSchemes"}}}}}, "description": "The reward ladders configured in your workspace. Each scheme carries the number of bands it\nholds and how many people's targets are read against it, so you can see which are in use\nbefore changing one. The default scheme is listed first and is offered when a target is set.", "tags": ["sales_targets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/target_scheme/{target_scheme_id}": {"get": {"operationId": "tenant_target_scheme", "summary": "Tenant Target Scheme", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "target_scheme_id", "schema": {"title": "Target Scheme Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTargetScheme"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "One scheme with its bands in order, each showing the name your team sees and the percentage\nof the target at which it starts. Use it to review a ladder before assigning it to someone.", "tags": ["sales_targets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/sales_targets": {"get": {"operationId": "tenant_sales_targets", "summary": "Tenant Sales Targets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "member_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Id"}, "required": false}, {"in": "query", "name": "period", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSalesTargets"}}}}}, "description": "The targets your team is working to. Filter by team member, or by a date to see the targets\nthat were live on that day, which is what you want when a quarterly number straddles the\nmonth you are looking at.", "tags": ["sales_targets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_target_scheme": {"post": {"operationId": "add_target_scheme", "summary": "Add Target Scheme", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Create a reward ladder your team will be measured against. Author it once and reuse it for\neveryone, so the language people hear stays the same whoever set their number. Mark one\nscheme as the default and it will be offered first whenever a target is created.", "tags": ["sales_targets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddTargetScheme"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_target_scheme/{target_scheme_id}": {"patch": {"operationId": "edit_target_scheme", "summary": "Edit Target Scheme", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "target_scheme_id", "schema": {"title": "Target Scheme Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Rename a scheme, change its description, or make it the default. Renaming changes what your\nteam sees on every target read against it, so prefer a new scheme when the meaning of a\nlevel changes rather than just its wording.", "tags": ["sales_targets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTargetScheme"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_target_scheme/{target_scheme_id}": {"delete": {"operationId": "delete_target_scheme", "summary": "Delete Target Scheme", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "target_scheme_id", "schema": {"title": "Target Scheme Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a ladder you no longer use, along with its bands. A scheme that people's targets are\nread against cannot be deleted: move those targets to another scheme first, so nobody is\nleft being measured against something that no longer exists.", "tags": ["sales_targets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_target_band/{target_scheme_id}": {"post": {"operationId": "add_target_band", "summary": "Add Target Band", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "target_scheme_id", "schema": {"title": "Target Scheme Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a level to a scheme, such as Threshold at 80 percent or Stretch at 125 percent. Every\nscheme needs one band sitting exactly at 100 percent, because that is the number itself and\neverything else is measured against it. Schemes hold between two and four bands.", "tags": ["sales_targets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddTargetBand"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_target_band/{target_scheme_id}/{target_band_id}": {"patch": {"operationId": "edit_target_band", "summary": "Edit Target Band", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "target_scheme_id", "schema": {"title": "Target Scheme Id", "type": "string"}, "required": true}, {"in": "path", "name": "target_band_id", "schema": {"title": "Target Band Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Rename a level or move the percentage at which it starts. Bands have to keep ascending and\none of them has to stay at 100 percent, so a change that would break the ladder is refused\nwith the reason rather than saved.", "tags": ["sales_targets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTargetBand"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_target_band/{target_scheme_id}/{target_band_id}": {"delete": {"operationId": "delete_target_band", "summary": "Delete Target Band", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "target_scheme_id", "schema": {"title": "Target Scheme Id", "type": "string"}, "required": true}, {"in": "path", "name": "target_band_id", "schema": {"title": "Target Band Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a level from a ladder. A scheme that people are already measured against has to keep\na valid ladder, so the band holding 100 percent cannot simply be dropped while targets\nreference the scheme.", "tags": ["sales_targets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_sales_target": {"post": {"operationId": "add_sales_target", "summary": "Add Sales Target", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Give someone a number to hit over a period, measured either in revenue or in deals won. Set\nnext quarter's targets today without disturbing this quarter's. Periods for the same person\nand measure cannot overlap, because two live numbers for one stretch of time means nobody\nknows which one counts. Use a shorter period with a smaller number for a mid-month joiner.", "tags": ["sales_targets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddSalesTarget"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_sales_target/{target_id}": {"patch": {"operationId": "edit_sales_target", "summary": "Edit Sales Target", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "target_id", "schema": {"title": "Target Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Adjust a target's amount, period, scheme or status. Attainment is recomputed from the stored\nnumber, so correcting a figure corrects every page that reads it. Set the status to inactive\nto retire a target without deleting the record of what someone was asked to do.", "tags": ["sales_targets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditSalesTarget"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_sales_target/{target_id}": {"delete": {"operationId": "delete_sales_target", "summary": "Delete Sales Target", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "target_id", "schema": {"title": "Target Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a target that was set in error. To retire one that was genuinely in force, set its\nstatus to inactive instead: that keeps the record of what the person was measured against.", "tags": ["sales_targets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_proposal": {"post": {"operationId": "add_proposal", "summary": "Add Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Create a proposal to track a possible deal: the customer, the value, the dates and what they\nneed. It starts in the funnel stage you choose and moves through your sales funnel.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddProposal"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal/{proposal_id}": {"get": {"operationId": "proposal", "summary": "Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OrgProposalDetails"}}}}}, "description": "Access complete proposal details including products, pricing, payment terms, and current\nstatus. Essential for sales reviews, customer presentations, and deal progression.\nIncludes calculated metrics like margins, totals, and payment schedules. Real-time\nupdates reflect any changes made by team members.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_history/{proposal_id}": {"get": {"operationId": "proposal_history", "summary": "Proposal History", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProposalHistoryOutput"}}}}}, "description": "View complete stage history for a proposal showing progression through sales pipeline.\nDisplays chronological timeline of stage changes with timestamps, durations, and responsible\nteam members. Essential for understanding deal velocity, identifying bottlenecks, and\nmaintaining audit trail of sales activities.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/product_status_history/{product_id}": {"get": {"operationId": "product_status_history", "summary": "Product Status History", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProductStatusHistoryOutput"}}}}}, "description": "View complete status history for a product showing progression through lifecycle stages.\nDisplays chronological timeline of status changes with timestamps, reasons, and responsible\nteam members. Essential for understanding product delivery progress, audit compliance,\nand workflow analysis.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_proposals/{org_id}": {"get": {"operationId": "org_proposals", "summary": "Org Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProposalList"}}}}}, "description": "View all proposals for a specific organization to understand account history and\npotential. Shows active opportunities, won deals, and lost proposals for complete\ncustomer context. Essential for account management and identifying upsell opportunities.\nHelps avoid proposal conflicts or duplicate efforts.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_lost_proposals/{org_id}": {"get": {"operationId": "org_lost_proposals", "summary": "Org Lost Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FunnelLostProposals"}}}}}, "description": "Analyze lost opportunities for an organization to understand competitive losses and\nimprove win rates. Includes loss reasons, competitor information, and timing data.\nCritical for refining sales strategies and identifying patterns in unsuccessful deals.\nUse insights to adjust pricing, positioning, or product offerings.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_proposals/{resource_id}": {"get": {"operationId": "resource_proposals", "summary": "Resource Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProposalList"}}}}}, "description": "Track all proposals involving a specific resource for capacity planning and utilization\nforecasting. Shows both active opportunities and committed work to prevent overbooking.\nEssential for resource managers to balance workload and make informed staffing decisions.\nIncludes tentative allocations from proposals in negotiation.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_pipeline": {"get": {"operationId": "my_pipeline", "summary": "My Pipeline", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyPipeline"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "See your own open proposals across every sales funnel, counted per stage with their value in\neach currency. Empty stages are included, so the funnel keeps its shape.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_stage_proposals/{stage_id}": {"get": {"operationId": "my_stage_proposals", "summary": "My Stage Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/StageProposals"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "List your own open proposals in one funnel stage, with customer, value, days in stage and the\nstages each can move to next.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/stage_proposals/{stage_id}": {"get": {"operationId": "stage_proposals", "summary": "Stage Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/StageProposals"}}}}}, "description": "Monitor all proposals at a specific pipeline stage for focused sales management.\nIdentifies bottlenecks, aging deals, and opportunities requiring attention. Essential\nfor sales managers to drive pipeline velocity and forecast accurately. Group coaching\nopportunities become visible when multiple deals stall at the same stage.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_proposal/{proposal_id}": {"patch": {"operationId": "edit_proposal", "summary": "Edit Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Update proposal details as negotiations progress and requirements clarify. Modify\nterms, timeline, scope, or commercial elements while maintaining version history.\nChanges trigger notifications to team members involved in the deal. Consider the\nimpact on resource planning and revenue forecasts when adjusting values or dates.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditProposal"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/change_proposal_stage/{proposal_id}/{stage_id}": {"patch": {"operationId": "change_proposal_stage", "summary": "Change Proposal Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move a proposal to another stage of your sales funnel. Moving it to Won makes it an active\nproject; moving it to Lost needs a reason. Both are final, but you can reopen the proposal\nwithin 30 days.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChangeProposalStage"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposals/{proposal_id}/accept_order": {"patch": {"operationId": "accept_portal_order", "summary": "Accept Portal Order", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Accept an order a customer placed in the customer portal.\nIt becomes a project, takes the items from availability and schedules its payment by your ordering terms.\nIt is refused while a tracked item is short.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AcceptPortalOrder"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposals/{proposal_id}/mark_order_delivered": {"patch": {"operationId": "mark_portal_order_delivered", "summary": "Mark Portal Order Delivered", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Mark a whole portal order delivered: every item still open is accepted on the customer's behalf.\nAn order paid on delivery has its payment re-dated from today.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MarkPortalOrderDelivered"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposals/{proposal_id}/reject_order": {"patch": {"operationId": "reject_portal_order", "summary": "Reject Portal Order", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Reject an order a customer placed in the customer portal.\nThe customer sees the reason with the order.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RejectPortalOrder"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reopen_proposal/{proposal_id}": {"post": {"operationId": "reopen_proposal", "summary": "Reopen Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reopen a won or lost proposal within 30 days, to fix a mistake in your funnel. It goes back to\nthe stage it was in before closing. A won proposal's project is deactivated and its catalog\nstock returned.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_proposal/{proposal_id}": {"delete": {"operationId": "delete_proposal", "summary": "Delete Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Permanently delete a proposal. Only allowed for proposals not in a terminal stage\nand with no linked products, payments, work items, support requests, or links. The\nproposal must be cleaned up by deleting its child records first. Files attached to\nthe proposal are moved to trash and recoverable for a limited time.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_products/{proposal_id}": {"get": {"operationId": "proposal_products", "summary": "Proposal Products", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProposalProducts"}}}}}, "description": "View all products and services included in a proposal with quantities, pricing, and\nmargins. Essential for understanding deal composition and profitability. Products can\nbe from your catalog or custom-configured for specific customer needs. Subtotals and\ntaxes calculate automatically based on your configuration.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_product/{product_id}": {"patch": {"operationId": "edit_product", "summary": "Edit Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Modify product specifications, quantities, or pricing within a proposal during\nnegotiations. Updates automatically recalculate totals and margins. Changes may\naffect payment schedules if tied to product deliverables. Consider the impact on\nresource requirements and delivery timelines when adjusting quantities.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditProduct"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/change_product_status/{product_id}/{status_id}": {"patch": {"operationId": "change_product_status", "summary": "Change Product Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}, {"in": "path", "name": "status_id", "schema": {"title": "Status Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change a product's status as its delivery moves on. Every change is kept in the product's\nhistory with its reason, and the customer sees the statuses marked visible to them.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChangeProductStatus"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_product/{product_id}": {"delete": {"operationId": "delete_product", "summary": "Delete Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove products from proposals when scope changes or items are no longer required.\nAutomatically updates proposal totals and may affect payment schedules. Cannot delete\nproducts from accepted proposals without customer consent. Review dependencies on\nother products or services before removal.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/product_status_badges/{product_id}": {"get": {"operationId": "product_status_badges", "summary": "Product Status Badges", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProductStatusBadges"}}}}}, "description": "Get product status badges for dynamic UI updates. Returns current state indicators\nfor in-progress, finished, and accepted statuses. Used for real-time interface\nupdates after state changes without full page reload.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/product_menu_items/{product_id}": {"get": {"operationId": "product_menu_items", "summary": "Product Menu Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProductMenuItems"}}}}}, "description": "Get product menu items for dynamic UI updates. Returns current state to determine\nwhich menu actions should be displayed. Used for real-time menu updates\nafter state changes without full page reload.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/catalog_template_data/{catalog_id}": {"get": {"operationId": "catalog_template_data", "summary": "Catalog Template Data", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "catalog_id", "schema": {"title": "Catalog Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Retrieve standardized product templates from your catalog for quick proposal creation.\nIncludes pre-configured pricing, specifications, and terms for consistency. Templates\naccelerate proposal generation while ensuring compliance with approved offerings.\nCustomize after adding to proposals for customer-specific requirements.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_product_from_catalog": {"post": {"operationId": "add_product_from_catalog", "summary": "Add Product From Catalog", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Add a catalog item to a proposal, with its description and price. The line is a copy: change it\nhere if this customer needs something different, and later catalog changes leave it as it is.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddProductFromCatalog"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_custom_product": {"post": {"operationId": "add_custom_product", "summary": "Add Custom Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Add a product that is not in your catalog, for a customer's special request, with its own\nspecification, price and cost. Prices are converted to the proposal's currency. If you sell it\nagain, add it to the catalog.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddCustomProduct"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_schedule_blocks/{proposal_id}": {"get": {"operationId": "payment_schedule_blocks", "summary": "Payment Schedule Blocks", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPaymentScheduleBlocks"}}}}}, "description": "View the complete payment structure for a proposal organized in milestone blocks.\nEach block represents a payment phase tied to deliverables or time periods. Essential\nfor cash flow planning and customer payment expectations. Blocks can contain multiple\npayment types including deposits, progress payments, and retentions.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_schedule_block/{proposal_id}": {"post": {"operationId": "add_payment_schedule_block", "summary": "Add Payment Schedule Block", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Add a block to the payment schedule, to group payments of one kind: upfront, milestone,\nprogress, on completion or consumption. Blocks show the customer how and when they pay.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddPaymentScheduleBlock"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_schedule_block/{proposal_id}/{block_id}": {"put": {"operationId": "edit_payment_schedule_block", "summary": "Edit Payment Schedule Block", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}, {"in": "path", "name": "block_id", "schema": {"title": "Block Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Modify payment milestone terms as negotiations evolve or project scope changes.\nUpdates cascade to all payments within the block maintaining proportional relationships.\nChanges require careful review as they affect cash flow forecasts and customer\nexpectations. Document reasons for schedule modifications for audit purposes.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditPaymentScheduleBlock"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_payment_schedule_block", "summary": "Delete Payment Schedule Block", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}, {"in": "path", "name": "block_id", "schema": {"title": "Block Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove payment milestones when restructuring deal terms or simplifying payment\nschedules. Deletion redistributes payment obligations to remaining blocks. Cannot\ndelete blocks with processed payments without financial reconciliation. Review\nimpact on project funding before removal.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_schedule_blocks/{proposal_id}/reorder": {"post": {"operationId": "reorder_payment_schedule_blocks", "summary": "Reorder Payment Schedule Blocks", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Adjust payment milestone sequence to match revised project timelines or priorities.\nReordering affects payment due dates and cash flow projections. Ensure customer\nagreement before changing established payment sequences. Maintain logical flow\naligned with project deliverables for clear expectations.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReorderPaymentScheduleBlocks"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/block_payments/{block_id}": {"get": {"operationId": "block_payments", "summary": "Block Payments", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "block_id", "schema": {"title": "Block Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputBlockPayments"}}}}}, "description": "List all payment components within a milestone block including amounts, due dates,\nand collection status. Shows payment breakdown for customer invoicing and internal\ntracking. Essential for accounts receivable management and collection follow-up.\nIncludes payment history and any adjustments made.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment": {"post": {"operationId": "add_payment", "summary": "Add Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Add a payment to a payment block: a fixed amount with a due date, in the project's currency. A\npayment in a milestone block is tied to a product.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddPayment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment/{payment_id}": {"patch": {"operationId": "edit_payment", "summary": "Edit Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_id", "schema": {"title": "Payment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Adjust payment terms, amounts, or dates based on negotiated changes or project\nmodifications. Updates affect revenue recognition and cash flow forecasts. Changes\nto collected payments require financial reconciliation. Document modifications\nfor audit compliance and customer communication.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditPayment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_payment", "summary": "Delete Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_id", "schema": {"title": "Payment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove payment obligations when restructuring commercial terms or correcting errors.\nCannot delete payments already collected without proper authorization and accounting\nadjustments. Deletion affects total contract value and revenue projections. Review\nremaining payment coverage before removal.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment/{payment_id}/mark_paid": {"patch": {"operationId": "mark_payment_paid", "summary": "Mark Payment Paid", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_id", "schema": {"title": "Payment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Record that a payment was collected, with the date. The owner and the customer's account manager\nare notified. A delivered, cancelled or archived project takes no more payment changes.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MarkPaymentPaid"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment/{payment_id}/mark_unpaid": {"patch": {"operationId": "mark_payment_unpaid", "summary": "Mark Payment Unpaid", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_id", "schema": {"title": "Payment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Mark a paid payment as not paid, for a refund, a bounced payment or a mistake. The owner and the\ncustomer's account manager are notified.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment/{payment_id}/billable_external_support_requests": {"get": {"operationId": "list_billable_external_support_requests_for_payment", "summary": "List Billable External Support Requests For Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_id", "schema": {"title": "Payment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputBillableSourceList"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "List closed support requests for this Payment's customer that have not yet been\nbilled on any Payment. Used by the consumption picker to attach support work as\nPayment sources. Each row carries the per-source amount suggestion (when rate\ncards exist) so the revenue officer can confirm or override before bulk-saving.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment/{payment_id}/billable_operational_work_items": {"get": {"operationId": "list_billable_operational_work_items_for_payment", "summary": "List Billable Operational Work Items For Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_id", "schema": {"title": "Payment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputBillableSourceList"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "List finished tasks (operational work items in their final stage) for this\nPayment's customer that have not yet been billed on any Payment. Used by the\nconsumption picker to attach completed task work as Payment sources.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment/{payment_id}/external_support_requests": {"post": {"operationId": "add_external_support_requests_to_payment", "summary": "Add External Support Requests To Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_id", "schema": {"title": "Payment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Attach one or more closed support requests to a consumption-type Payment as\nbillable sources. Each entry contributes its amount to the Payment total.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestsToPayment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment/{payment_id}/operational_work_items": {"post": {"operationId": "add_operational_work_items_to_payment", "summary": "Add Operational Work Items To Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_id", "schema": {"title": "Payment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Attach one or more finished tasks to a consumption-type Payment as billable\nsources. Each entry contributes its amount to the Payment total.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddOperationalWorkItemsToPayment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_source/external_support_request/{payment_source_id}": {"patch": {"operationId": "edit_external_support_request_on_payment", "summary": "Edit External Support Request On Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_source_id", "schema": {"title": "Payment Source Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Adjust the billable amount or note on an already-attached support request\nsource. The parent Payment total is recomputed from the new figure. Preserves\na single audit-chain event rather than producing a detach + re-attach pair.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditPaymentSource"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_external_support_request_from_payment", "summary": "Delete External Support Request From Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_source_id", "schema": {"title": "Payment Source Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Detach a support request source from its Payment. The Payment total is\nrecomputed and the source becomes immediately available to be billed on a\ndifferent Payment. The pre-deletion state is preserved in the audit log.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_source/operational_work_item/{payment_source_id}": {"patch": {"operationId": "edit_operational_work_item_on_payment", "summary": "Edit Operational Work Item On Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_source_id", "schema": {"title": "Payment Source Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Adjust the billable amount or note on an already-attached task source. The\nparent Payment total is recomputed from the new figure.", "tags": ["proposals"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditPaymentSource"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_operational_work_item_from_payment", "summary": "Delete Operational Work Item From Payment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "payment_source_id", "schema": {"title": "Payment Source Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Detach a task source from its Payment. The Payment total is recomputed and\nthe source becomes immediately available to be billed on a different Payment.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_flow_chart/{proposal_id}": {"get": {"operationId": "payment_flow_chart", "summary": "Payment Flow Chart", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PaymentFlowChartData"}}}}}, "description": "Visualize payment timeline showing when revenue is expected throughout the project\nlifecycle. Essential for cash flow planning and working capital management. Chart\nhighlights payment milestones, amounts, and collection status. Use for customer\npresentations to set clear payment expectations.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_cumulative_chart/{proposal_id}": {"get": {"operationId": "payment_cumulative_chart", "summary": "Payment Cumulative Chart", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PaymentCumulativeChartData"}}}}}, "description": "Track cumulative revenue collection over time for project financial health monitoring.\nShows actual collections versus planned schedule to identify delays or acceleration.\nCritical for earned value management and project profitability analysis. Helps predict\nfinal project margins based on collection patterns.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/payment_status_chart/{proposal_id}": {"get": {"operationId": "payment_status_chart", "summary": "Payment Status Chart", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PaymentStatusChartData"}}}}}, "description": "Analyze payment collection status distribution to understand accounts receivable\nposition. Breaks down payments by paid, pending, overdue, and future categories.\nEssential for collection prioritization and credit risk assessment. Identifies\nproblem accounts requiring intervention before they impact cash flow.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_general/{proposal_id}": {"get": {"operationId": "proposal_general", "summary": "Proposal General", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Access core proposal information including customer details, timeline, scope summary,\nand key stakeholders. Foundation view for understanding deal context and requirements.\nShows proposal status, probability, and strategic importance. Essential for sales\nreviews and quick deal assessment.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_pricing/{proposal_id}": {"get": {"operationId": "proposal_pricing", "summary": "Proposal Pricing", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Analyze pricing strategy with detailed breakdown of products, discounts, and margins.\nCompare list prices to negotiated rates for discount governance. Shows competitive\npositioning and profitability metrics. Critical for pricing approval workflows and\nmargin protection.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_costs/{proposal_id}": {"get": {"operationId": "proposal_costs", "summary": "Proposal Costs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Review internal cost structure including resources, materials, and overhead allocations.\nEssential for margin analysis and profitability validation. Identifies cost drivers\nand optimization opportunities. Sensitive information not shared with customers -\nused for internal decision making and pricing strategy.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_work_schedule/{proposal_id}": {"get": {"operationId": "proposal_work_schedule", "summary": "Proposal Work Schedule", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProposalWorkSchedule"}}}}}, "description": "Plan project timeline with resource allocation, milestones, and dependencies. Shows\nwhen work will be performed and by whom. Critical for capacity planning and delivery\ncommitment validation. Integrates with resource calendars to identify scheduling\nconflicts.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_preview/{proposal_id}": {"get": {"operationId": "proposal_preview", "summary": "Proposal Preview", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProposalPreview"}}}}}, "description": "Generate customer-ready proposal presentation with professional formatting and\nbranding. Excludes internal costs and margins while highlighting value proposition.\nUse for customer meetings, email attachments, or portal sharing. Automatically\nupdates with latest proposal changes for version consistency.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_pdf/{proposal_id}": {"get": {"operationId": "proposal_pdf", "summary": "Proposal Pdf", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Generate downloadable PDF of proposal for offline sharing, printing, or email attachment.\nThe PDF mirrors the preview format with professional styling and branding. Includes\ncompany and customer details, products, payment schedule, terms, and acceptance info.\nFile is named with proposal reference code for easy identification.", "tags": ["proposals"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_projects/{resource_id}": {"get": {"operationId": "resource_projects", "summary": "Resource Projects", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectsList"}}}}}, "description": "Track all active projects involving a specific resource for capacity planning and utilization\nmonitoring. Shows committed work to understand current resource allocation and workload.\nEssential for resource managers to balance capacity and identify over-allocation.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_products/{project_id}": {"get": {"operationId": "project_products", "summary": "Project Products", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectProducts"}}}}}, "description": "View simplified list of products for a project showing quantities and types.\nReturns only essential product information for project overview displays.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_wbs_config/{project_id}": {"get": {"operationId": "project_wbs_config", "summary": "Project Wbs Config", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectWBSConfig"}}}}}, "description": "Get the WBS configuration status for a project.\nShows the current configuration or a warning if none is set.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/update_project_wbs/{project_id}": {"patch": {"operationId": "update_project_wbs", "summary": "Update Project Wbs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update the WBS configuration for a project.\nSets or changes the Work Breakdown Structure template used for the project.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateProjectWBS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_project/{project_id}": {"patch": {"operationId": "edit_project", "summary": "Edit Project", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Update a live project's name, description, internal code, manager, dates, and\ncapability toggles as delivery proceeds. Disabling a capability with attached\ndata is refused with the reason. Commercial terms set when the proposal was won\nare not editable here.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditProject"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_project/{project_id}": {"delete": {"operationId": "delete_project", "summary": "Delete Project", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Permanently delete an active project. Only allowed for projects with no\nlinked products, payments, work items, support requests, or links. The\nproject must be cleaned up by deleting its child records first. Files\nattached to the project are moved to trash and recoverable for a limited time.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_project_delivered/{project_id}": {"patch": {"operationId": "mark_project_delivered", "summary": "Mark Project Delivered", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Mark an active project as delivered to the customer. The project becomes read-only, payments\nincluded; you can reopen it within 7 days.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/cancel_project/{project_id}": {"patch": {"operationId": "cancel_project", "summary": "Cancel Project", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Stop an active project before delivery, with a reason. The project becomes read-only; you can\nreopen it within 7 days.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CancelProject"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reopen_project/{project_id}": {"patch": {"operationId": "reopen_project", "summary": "Reopen Project", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move a delivered or cancelled project back to active, within 7 days. Use it to undo a delivery\nmarked too early or to resume a cancelled project.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/archive_project/{project_id}": {"patch": {"operationId": "archive_project", "summary": "Archive Project", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Hide a delivered or cancelled project from the default project lists, keeping all its records.\nAn archived project cannot be reopened until you unarchive it.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unarchive_project/{project_id}": {"patch": {"operationId": "unarchive_project", "summary": "Unarchive Project", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Bring an archived project back into the default project lists, without changing its status.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_work_items/{project_id}": {"get": {"operationId": "project_work_items", "summary": "Project Work Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by name, description or internal code", "q": ["name__icontains", "description__icontains", "internal_code__icontains"], "title": "Search"}, "required": false, "description": "Search by name, description or internal code"}, {"in": "query", "name": "internal_code", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by exact internal code", "q": "internal_code__iexact", "title": "Internal Code"}, "required": false, "description": "Filter by exact internal code"}, {"in": "query", "name": "work_item_type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by work item type", "q": "work_item_type__external_id", "title": "Work Item Type"}, "required": false, "description": "Filter by work item type"}, {"in": "query", "name": "owner", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by owner", "q": "owner__external_id", "title": "Owner"}, "required": false, "description": "Filter by owner"}, {"in": "query", "name": "constraint_type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by scheduling constraint", "q": "constraint_type__iexact", "title": "Constraint Type"}, "required": false, "description": "Filter by scheduling constraint"}, {"in": "query", "name": "planned_start_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Planned start on or after this date, e.g. '02 Jan, 2025'", "title": "Planned Start From"}, "required": false, "description": "Planned start on or after this date, e.g. '02 Jan, 2025'"}, {"in": "query", "name": "planned_start_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Planned start on or before this date, e.g. '02 Jan, 2025'", "title": "Planned Start To"}, "required": false, "description": "Planned start on or before this date, e.g. '02 Jan, 2025'"}, {"in": "query", "name": "planned_end_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Planned end on or after this date, e.g. '02 Jan, 2025'", "title": "Planned End From"}, "required": false, "description": "Planned end on or after this date, e.g. '02 Jan, 2025'"}, {"in": "query", "name": "planned_end_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Planned end on or before this date, e.g. '02 Jan, 2025'", "title": "Planned End To"}, "required": false, "description": "Planned end on or before this date, e.g. '02 Jan, 2025'"}, {"in": "query", "name": "is_finished", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Only finished work items", "q": "is_finished", "title": "Is Finished"}, "required": false, "description": "Only finished work items"}, {"in": "query", "name": "is_accepted", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Only accepted work items", "q": "is_accepted", "title": "Is Accepted"}, "required": false, "description": "Only accepted work items"}, {"in": "query", "name": "visible_to_customer", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Only work items visible to the customer", "q": "visible_to_customer", "title": "Visible To Customer"}, "required": false, "description": "Only work items visible to the customer"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectWorkItems"}}}}}, "description": "Get work items hierarchy and available work item types for a project.\nShows the complete work breakdown structure with all work items,\nand provides information about what types can be added at the top level\nbased on the project's WBS configuration.\n\nApplying a filter returns the matching work items as a flat list instead of the tree,\nsince a filtered hierarchy is not a hierarchy.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/child_work_items/{project_id}/{parent_id}": {"get": {"operationId": "child_work_items", "summary": "Child Work Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "parent_id", "schema": {"title": "Parent Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectWorkItems"}}}}}, "description": "Get child work items hierarchy for a specific parent work item.\nShows only the descendants of the specified parent work item,\nuseful for drilling down into specific sections of the WBS.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/key_project_activities/{project_id}": {"get": {"operationId": "key_project_activities", "summary": "Key Project Activities", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKeyProjectActivities"}}}}}, "description": "Get key project activities based on schedule management setting.\n\nWhen schedule management is disabled, returns execution-type work items ordered by\nhierarchy. When schedule management is enabled, returns scheduled activities.\nProvides quick overview of main project deliverables and their completion status.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_schedule/{project_id}": {"get": {"operationId": "project_schedule", "summary": "Project Schedule", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectSchedule"}}}}}, "description": "Get project schedule with critical path calculation.\n\nReturns task scheduling data including early/late dates, float, and critical path.\nUses cached CPM calculation results from WorkItemSchedule table.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_gantt_data/{project_id}": {"get": {"operationId": "project_gantt_data", "summary": "Project Gantt Data", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectGanttData"}}}}}, "description": "Get a project's work items as a Gantt timeline: dates, dependencies and progress. With schedule\nmanagement on, dates come from the calculated schedule and the critical path is marked;\notherwise they are the planned start and finish dates.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_evm_metrics/{project_id}": {"get": {"operationId": "project_evm_metrics", "summary": "Project Evm Metrics", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectEVMMetrics"}}}}}, "description": "Get Earned Value Management (EVM) metrics for a project.\n\nReturns EVM performance indicators including PV, EV, AC, SPI, CPI, and forecasting metrics.\nRequires financial, schedule, and EVM management to be enabled for the project.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_work_item_detail/{work_item_id}": {"get": {"operationId": "project_work_item_detail", "summary": "Project Work Item Detail", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectWorkItemDetail"}}}}}, "description": "Get detailed information for a single project work item.\nReturns all fields needed to display the work item detail page.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_item": {"post": {"operationId": "add_work_item", "summary": "Add Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a new work item to a project.\nValidates WBS rules and creates the work item with proper hierarchy.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/instantiate_work_item_template": {"post": {"operationId": "instantiate_work_item_template", "summary": "Instantiate Work Item Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Instantiate a work item template hierarchy into a project.\nCreates all work items from the template structure, validating WBS compatibility.\nSupports milestone dates, default owner assignment, and product association.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/InstantiateWorkItemTemplate"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_project_work_item/{work_item_id}": {"patch": {"operationId": "edit_project_work_item", "summary": "Edit Project Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit an existing work item in a project.\nUpdates name, description, dates, owner, and visibility.\nCannot change work item type or parent due to WBS constraints.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWorkItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/update_work_item_status/{work_item_id}": {"patch": {"operationId": "update_work_item_status", "summary": "Update Work Item Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update work item status (execution and event type work items).\n- EXECUTION: Updates percent_complete, is_finished, and finished_at fields\n- EVENT: Updates is_finished and finished_at fields only (no percent_complete)", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateWorkItemStatus"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reorder_work_item_up/{work_item_id}": {"patch": {"operationId": "reorder_work_item_up", "summary": "Reorder Work Item Up", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move work item up in the sibling order within its parent.\nChanges the display order of work items at the same hierarchy level.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reorder_work_item_down/{work_item_id}": {"patch": {"operationId": "reorder_work_item_down", "summary": "Reorder Work Item Down", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move work item down in the sibling order within its parent.\nChanges the display order of work items at the same hierarchy level.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_item_predecessor": {"post": {"operationId": "add_work_item_predecessor", "summary": "Add Work Item Predecessor", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a predecessor dependency to a work item.\nThe predecessor must finish before this work item can start (or based on dependency type).\nValidates against circular dependencies automatically.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkItemPredecessor"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_item_successor": {"post": {"operationId": "add_work_item_successor", "summary": "Add Work Item Successor", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a successor dependency to a work item.\nThe successor cannot start until this work item finishes (or based on dependency type).\nValidates against circular dependencies automatically.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkItemSuccessor"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_dependencies/{work_item_id}": {"get": {"operationId": "work_item_dependencies", "summary": "Work Item Dependencies", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemDependenciesOutput"}}}}}, "description": "Get all dependencies for a work item, grouped by predecessors and successors.\nReturns data structured for display in two-column layout.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_item_dependency/{dependency_id}": {"delete": {"operationId": "delete_work_item_dependency", "summary": "Delete Work Item Dependency", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "dependency_id", "schema": {"title": "Dependency Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a work item dependency.\nRemoves the scheduling constraint and updates the dependency graph automatically.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_item/{work_item_id}": {"delete": {"operationId": "delete_work_item", "summary": "Delete Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}, {"in": "query", "name": "delete_descendants", "schema": {"default": false, "title": "Delete Descendants", "type": "boolean"}, "required": false}, {"in": "query", "name": "reparent_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reparent Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a work item with options for handling children.\nBlocks deletion if the work item has dependencies, costs, expenses, work logs, or resource usages.\nChildren can be deleted or reparented to another work item of the same type within the same project.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_item_cost": {"post": {"operationId": "add_work_item_cost", "summary": "Add Work Item Cost", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add an expected cost to a work item.\nTracks planned expenses for budgeting and forecasting purposes.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkItemCost"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_item_expense": {"post": {"operationId": "add_work_item_expense", "summary": "Add Work Item Expense", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add an actual expense to a work item.\nRecords real costs incurred for financial tracking and reporting.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkItemExpense"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_log": {"post": {"operationId": "add_work_log", "summary": "Add Work Log", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Log work hours against a work item. Requires valid team booking.\nValidates booking compatibility and date range before recording hours.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkLog"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_work_log/{log_id}": {"patch": {"operationId": "edit_work_log", "summary": "Edit Work Log", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "log_id", "schema": {"title": "Log Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Edit a work log. Users can only edit their own logs.\nUpdates booking, hours, date, and notes for work time tracking.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWorkLog"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_log/{log_id}": {"delete": {"operationId": "delete_work_log", "summary": "Delete Work Log", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "log_id", "schema": {"title": "Log Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a work log. Users can only delete their own logs.\nRemoves work time entries from the work item tracking.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_work_resource_usage": {"post": {"operationId": "add_work_resource_usage", "summary": "Add Work Resource Usage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Log resource usage against a work item. Requires valid resource booking.\nValidates booking compatibility and date range before recording usage.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkResourceUsage"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_work_resource_usage/{usage_id}": {"patch": {"operationId": "edit_work_resource_usage", "summary": "Edit Work Resource Usage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "usage_id", "schema": {"title": "Usage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit a resource usage entry. Updates booking, usage quantity, date, and notes.\nValidates booking belongs to same project and date is within booking period.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWorkResourceUsage"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_resource_usage/{usage_id}": {"delete": {"operationId": "delete_work_resource_usage", "summary": "Delete Work Resource Usage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "usage_id", "schema": {"title": "Usage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a resource usage entry. Removes the usage log from the work item.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_work_item_cost/{cost_id}": {"patch": {"operationId": "edit_work_item_cost", "summary": "Edit Work Item Cost", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "cost_id", "schema": {"title": "Cost Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit an existing work item cost.\nUpdates planned expenses for accurate budgeting and forecasting.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWorkItemCost"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_work_item_expense/{expense_id}": {"patch": {"operationId": "edit_work_item_expense", "summary": "Edit Work Item Expense", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "expense_id", "schema": {"title": "Expense Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit an existing work item expense.\nUpdates actual costs for accurate financial tracking and reporting.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWorkItemExpense"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_item_cost/{cost_id}": {"delete": {"operationId": "delete_work_item_cost", "summary": "Delete Work Item Cost", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "cost_id", "schema": {"title": "Cost Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a work item cost.\nRemoves planned cost entries for budget adjustments and corrections.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_item_expense/{expense_id}": {"delete": {"operationId": "delete_work_item_expense", "summary": "Delete Work Item Expense", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "expense_id", "schema": {"title": "Expense Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a work item expense.\nRemoves actual expense entries for corrections and adjustments.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_costs/{work_item_id}": {"get": {"operationId": "work_item_costs", "summary": "Work Item Costs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemCostsOutput"}}}}}, "description": "List all planned costs for a work item.\nShows budgeted amounts for financial planning and forecasting.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_expenses/{work_item_id}": {"get": {"operationId": "work_item_expenses", "summary": "Work Item Expenses", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemExpensesOutput"}}}}}, "description": "List all actual expenses for a work item.\nShows real spending for budget tracking and variance analysis.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_work_logs/{work_item_id}": {"get": {"operationId": "work_item_work_logs", "summary": "Work Item Work Logs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemWorkLogsOutput"}}}}}, "description": "List all work logs for a work item.\nShows time tracking entries by team members.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_resource_usage/{work_item_id}": {"get": {"operationId": "work_item_resource_usage", "summary": "Work Item Resource Usage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemResourceUsageOutput"}}}}}, "description": "List all resource usage for a work item.\nShows resource consumption entries with booking details.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_team_members/{project_id}": {"get": {"operationId": "project_team_members", "summary": "Project Team Members", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectTeamMembers"}}}}}, "description": "List all team members booked for a project with their allocation periods.\nShows who is working on the project and when they are scheduled.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_team_member_bookings/{project_id}/{member_id}": {"get": {"operationId": "project_team_member_bookings", "summary": "Project Team Member Bookings", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectTeamMembers"}}}}}, "description": "List all bookings for a specific team member on a project.\nShows the allocation periods for a single team member working on the project.\nUseful for team member-specific views and individual schedule management.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_team_member_work_items/{project_id}/{member_id}": {"get": {"operationId": "project_team_member_work_items", "summary": "Project Team Member Work Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TeamMemberWorkItems"}}}}}, "description": "List all work items owned by a specific team member in a project.\nShows flat list of work items with hierarchy IDs, types, and status.\nUseful for team member workload views and individual assignment tracking.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_team_member_work_logs/{project_id}/{member_id}": {"get": {"operationId": "project_team_member_work_logs", "summary": "Project Team Member Work Logs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TeamMemberWorkItems"}}}}}, "description": "List execution-type work items with time tracking for a specific team member.\nShows planned hours vs actual logged hours for timesheet and progress views.\nOnly includes work items with 'execution' scheduling behaviour.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_team_member_costs/{project_id}/{member_id}": {"get": {"operationId": "project_team_member_costs", "summary": "Project Team Member Costs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemCostsOutput"}}}}}, "description": "List all planned costs created by a specific team member in a project.\nShows budgeted costs that the team member added for financial planning.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_team_member_expenses/{project_id}/{member_id}": {"get": {"operationId": "project_team_member_expenses", "summary": "Project Team Member Expenses", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemExpensesOutput"}}}}}, "description": "List all actual expenses created by a specific team member in a project.\nShows real spending that the team member recorded for budget tracking.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_team_member_booking_heatmap/{project_id}/{member_id}": {"get": {"operationId": "project_team_member_booking_heatmap", "summary": "Project Team Member Booking Heatmap", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTeamMemberBookingHeatmap"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Generate adaptive booking/activity heatmap for a team member in a project.\n\nDynamically adapts based on project settings:\n- Shows bookings if booking management is enabled\n- Shows work activity if effort management is enabled\n- Shows both when both features are enabled\n\nFoundation is always team member availability. Overlays adapt to enabled features.\nTime boundaries determined by available data sources (bookings and/or work logs).", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_team_people/{project_id}": {"get": {"operationId": "project_team_people", "summary": "Project Team People", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectTeamPeople"}}}}}, "description": "List unique team members working on a project.\n\nReturns booking data if enable_booking_management is enabled,\notherwise returns work item ownership data.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_resources/{project_id}": {"get": {"operationId": "project_resources", "summary": "Project Resources", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectResources"}}}}}, "description": "List all resources booked for a project with their allocation periods.\nShows which resources are allocated to the project and when they are scheduled.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_resource_items/{project_id}": {"get": {"operationId": "project_resource_items", "summary": "Project Resource Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectResourceItems"}}}}}, "description": "List unique resources working on a project.\n\nReturns booking data if enable_booking_management is enabled,\notherwise returns usage data if enable_resource_management is enabled.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_resource_bookings/{project_id}/{resource_id}": {"get": {"operationId": "project_resource_bookings", "summary": "Project Resource Bookings", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectResourceBookings"}}}}}, "description": "List all bookings for a specific resource on a project.\nShows the allocation periods for a single resource assigned to the project.\nUseful for resource-specific views and individual resource schedule management.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_resource_work_items/{project_id}/{resource_id}": {"get": {"operationId": "project_resource_work_items", "summary": "Project Resource Work Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceWorkItems"}}}}}, "description": "List all work items where a specific resource was actually used in a project.\nShows work items with resource usage tracking, displaying usage quantities.\nUseful for resource utilization analysis and understanding where resources were consumed.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_resource_costs/{project_id}/{resource_id}": {"get": {"operationId": "project_resource_costs", "summary": "Project Resource Costs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemCostsOutput"}}}}}, "description": "List all planned costs for a specific resource in a project.\nShows budgeted costs for the resource for financial planning.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_resource_expenses/{project_id}/{resource_id}": {"get": {"operationId": "project_resource_expenses", "summary": "Project Resource Expenses", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemExpensesOutput"}}}}}, "description": "List all actual expenses for a specific resource in a project.\nShows real spending for the resource for budget tracking.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_resource_activity/{project_id}/{resource_id}": {"get": {"operationId": "project_resource_activity", "summary": "Project Resource Activity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectResourceActivityOutput"}}}}}, "description": "List all resource usage records for a specific resource in a project.\nShows how the resource was consumed across different work items with usage details.\nUseful for understanding resource utilization patterns and tracking consumption.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_resource_activity_histogram/{project_id}/{resource_id}": {"get": {"operationId": "project_resource_activity_histogram", "summary": "Project Resource Activity Histogram", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectResourceActivityHistogramSchema"}}}}}, "description": "Get histogram of resource usage by ISO year-week for a specific resource in a project.\nAggregates WorkResourceUsage by week from earliest booking start to latest booking end.\nShows usage patterns and identifies peak utilization periods across project timeline.\nUseful for capacity planning and understanding resource consumption trends.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_product_cost_comparison/{project_id}": {"get": {"operationId": "project_product_cost_comparison", "summary": "Project Product Cost Comparison", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectProductCostComparisonSchema"}}}}}, "description": "Product budget visualization with mode-based display.\n\nFinancial mode (enable_financial_management=True):\n- Grouped bar chart comparing proposal vs project costs\n- Shows variance analysis and cost tracking\n\nSimplified mode (enable_financial_management=False):\n- Single bar chart showing proposal budget only\n- No cost tracking or variance", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_product_budget_breakdown/{project_id}": {"get": {"operationId": "project_product_budget_breakdown", "summary": "Project Product Budget Breakdown", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectProductBudgetBreakdownSchema"}}}}}, "description": "Product budget breakdown with mode-based display.\n\nFinancial mode (enable_financial_management=True):\n- Shows detailed cost breakdown by cost type for each product\n- Pie charts visualizing cost composition\n- Cost types ordered by amount\n\nSimplified mode (enable_financial_management=False):\n- Returns empty breakdown (informational message only)\n- No detailed cost tracking available", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_product_resource_usages/{project_id}/{product_id}": {"get": {"operationId": "project_product_resource_usages", "summary": "Project Product Resource Usages", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProductResourceUsagesOutput"}}}}}, "description": "List all resource usages for work items linked to a specific product in a project.\nShows resource consumption entries with booking and member details for product tracking.\nUseful for understanding which resources were used to deliver this product.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_product_work_items/{project_id}/{product_id}": {"get": {"operationId": "project_product_work_items", "summary": "Project Product Work Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProductWorkItems"}}}}}, "description": "List all work items linked to a specific product in a project.\nShows flat list of work items with hierarchy IDs, types, and status.\nUseful for product scope analysis and understanding product composition.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_product_work_templates/{project_id}/{product_id}": {"get": {"operationId": "project_product_work_templates", "summary": "Project Product Work Templates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProductWorkTemplates"}}}}}, "description": "Get work item templates for a product via its catalog.\n\nReturns templates that are linked to the product's catalog item.\nThis is read-only - templates are managed at the catalog level.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_product_costs/{project_id}/{product_id}": {"get": {"operationId": "project_product_costs", "summary": "Project Product Costs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemCostsOutput"}}}}}, "description": "List all planned costs for work items linked to a specific product in a project.\nShows budgeted costs for the product for financial planning and tracking.\nUseful for product-level cost analysis and budget management.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_product_expenses/{project_id}/{product_id}": {"get": {"operationId": "project_product_expenses", "summary": "Project Product Expenses", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkItemExpensesOutput"}}}}}, "description": "List all actual expenses for work items linked to a specific product in a project.\nShows real spending for the product for budget tracking and variance analysis.\nUseful for product profitability analysis and cost control.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_cash_flow_metrics/{project_id}": {"get": {"operationId": "project_cash_flow_metrics", "summary": "Project Cash Flow Metrics", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectCashFlowMetrics"}}}}}, "description": "Get cash flow metrics for a project (inflow, outflow, net).\nRequires permissions to view project costs and expenses.\nUsed in project Cash-Flow tab for real-time financial metrics.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_cash_balance_chart/{project_id}": {"get": {"operationId": "project_cash_balance_chart", "summary": "Project Cash Balance Chart", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectCashBalanceChartData"}}}}}, "description": "Get cumulative cash balance chart (S-curve) for project financial tracking.\nShows weekly cash balance progression from paid payments and actual expenses.\nUsed in project Cash-Flow tab for visualizing financial health over time.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/active_proposals": {"get": {"operationId": "active_proposals", "summary": "Active Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by proposal name, description, or customer name", "title": "Search"}, "required": false, "description": "Search by proposal name, description, or customer name"}, {"in": "query", "name": "name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by proposal name", "q": "name__icontains", "title": "Name"}, "required": false, "description": "Filter by proposal name"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer external ID", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer external ID"}, {"in": "query", "name": "sales_stage", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by sales stage external ID", "q": "sales_stage__external_id", "title": "Sales Stage"}, "required": false, "description": "Filter by sales stage external ID"}, {"in": "query", "name": "sales_funnel", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by sales funnel external ID", "q": "sales_stage__funnel__external_id", "title": "Sales Funnel"}, "required": false, "description": "Filter by sales funnel external ID"}, {"in": "query", "name": "stage_type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by stage type", "q": "sales_stage__stage_type", "title": "Stage Type"}, "required": false, "description": "Filter by stage type"}, {"in": "query", "name": "owner", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by proposal owner external ID", "q": "owner__external_id", "title": "Owner"}, "required": false, "description": "Filter by proposal owner external ID"}, {"in": "query", "name": "manager", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by proposal manager external ID", "q": "manager__external_id", "title": "Manager"}, "required": false, "description": "Filter by proposal manager external ID"}, {"in": "query", "name": "created_after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter proposals created after this date (ISO format)", "title": "Created After"}, "required": false, "description": "Filter proposals created after this date (ISO format)"}, {"in": "query", "name": "created_before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter proposals created before this date (ISO format)", "title": "Created Before"}, "required": false, "description": "Filter proposals created before this date (ISO format)"}, {"in": "query", "name": "expected_close_after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter proposals with expected close date after this date", "title": "Expected Close After"}, "required": false, "description": "Filter proposals with expected close date after this date"}, {"in": "query", "name": "expected_close_before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter proposals with expected close date before this date", "title": "Expected Close Before"}, "required": false, "description": "Filter proposals with expected close date before this date"}, {"in": "query", "name": "sent_after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter proposals sent after this date", "title": "Sent After"}, "required": false, "description": "Filter proposals sent after this date"}, {"in": "query", "name": "sent_before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter proposals sent before this date", "title": "Sent Before"}, "required": false, "description": "Filter proposals sent before this date"}, {"in": "query", "name": "has_products", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter proposals that have products", "title": "Has Products"}, "required": false, "description": "Filter proposals that have products"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set - match ANY tag in this set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set - match ANY tag in this set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set - match ANY tag in this set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set - match ANY tag in this set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set - match ANY tag in this set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set - match ANY tag in this set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ActiveProposalsList"}}}}}, "description": "List all active proposals that haven't been closed (won or lost). Shows proposals\nin progress through the sales pipeline from a project management perspective.\nUseful for project planning and resource allocation forecasting.\nSupports filtering by various criteria including tags, labels, dates, and more.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/projects": {"get": {"operationId": "list_projects", "summary": "List Projects", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by project name, description, or customer name", "title": "Search"}, "required": false, "description": "Search by project name, description, or customer name"}, {"in": "query", "name": "name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project name", "q": "name__icontains", "title": "Name"}, "required": false, "description": "Filter by project name"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer external ID", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer external ID"}, {"in": "query", "name": "owner", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project owner external ID", "q": "owner__external_id", "title": "Owner"}, "required": false, "description": "Filter by project owner external ID"}, {"in": "query", "name": "manager", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project manager external ID", "q": "manager__external_id", "title": "Manager"}, "required": false, "description": "Filter by project manager external ID"}, {"in": "query", "name": "created_after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Show projects created after this date (YYYY-MM-DD)", "title": "Created After"}, "required": false, "description": "Show projects created after this date (YYYY-MM-DD)"}, {"in": "query", "name": "created_before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Show projects created before this date (YYYY-MM-DD)", "title": "Created Before"}, "required": false, "description": "Show projects created before this date (YYYY-MM-DD)"}, {"in": "query", "name": "closed_won_after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Show projects that moved to closed_won after this date (YYYY-MM-DD)", "title": "Closed Won After"}, "required": false, "description": "Show projects that moved to closed_won after this date (YYYY-MM-DD)"}, {"in": "query", "name": "closed_won_before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Show projects that moved to closed_won before this date (YYYY-MM-DD)", "title": "Closed Won Before"}, "required": false, "description": "Show projects that moved to closed_won before this date (YYYY-MM-DD)"}, {"in": "query", "name": "has_products", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter projects that have products attached", "title": "Has Products"}, "required": false, "description": "Filter projects that have products attached"}, {"in": "query", "name": "lifecycle_status", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by lifecycle status. Pass repeated query params (?lifecycle_status=delivered&lifecycle_status=cancelled).", "title": "Lifecycle Status"}, "required": false, "description": "Filter by lifecycle status. Pass repeated query params (?lifecycle_status=delivered&lifecycle_status=cancelled)."}, {"in": "query", "name": "archived", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter by archive flag.", "q": "is_archived", "title": "Archived"}, "required": false, "description": "Filter by archive flag."}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set - match ANY tag in this set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set - match ANY tag in this set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set - match ANY tag in this set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set - match ANY tag in this set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set - match ANY tag in this set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set - match ANY tag in this set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectsList"}}}}}, "description": "List all active projects (proposals in closed_won stage) in the tenant.\nShows completed deals that are now active projects with project details.\nSupports filtering by various criteria including tags, labels, dates, and more.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_projects/{org_id}": {"get": {"operationId": "org_projects", "summary": "Org Projects", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by project name, description, or customer name", "title": "Search"}, "required": false, "description": "Search by project name, description, or customer name"}, {"in": "query", "name": "name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project name", "q": "name__icontains", "title": "Name"}, "required": false, "description": "Filter by project name"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer external ID", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer external ID"}, {"in": "query", "name": "owner", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project owner external ID", "q": "owner__external_id", "title": "Owner"}, "required": false, "description": "Filter by project owner external ID"}, {"in": "query", "name": "manager", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project manager external ID", "q": "manager__external_id", "title": "Manager"}, "required": false, "description": "Filter by project manager external ID"}, {"in": "query", "name": "created_after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Show projects created after this date (YYYY-MM-DD)", "title": "Created After"}, "required": false, "description": "Show projects created after this date (YYYY-MM-DD)"}, {"in": "query", "name": "created_before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Show projects created before this date (YYYY-MM-DD)", "title": "Created Before"}, "required": false, "description": "Show projects created before this date (YYYY-MM-DD)"}, {"in": "query", "name": "closed_won_after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Show projects that moved to closed_won after this date (YYYY-MM-DD)", "title": "Closed Won After"}, "required": false, "description": "Show projects that moved to closed_won after this date (YYYY-MM-DD)"}, {"in": "query", "name": "closed_won_before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Show projects that moved to closed_won before this date (YYYY-MM-DD)", "title": "Closed Won Before"}, "required": false, "description": "Show projects that moved to closed_won before this date (YYYY-MM-DD)"}, {"in": "query", "name": "has_products", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter projects that have products attached", "title": "Has Products"}, "required": false, "description": "Filter projects that have products attached"}, {"in": "query", "name": "lifecycle_status", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by lifecycle status. Pass repeated query params (?lifecycle_status=delivered&lifecycle_status=cancelled).", "title": "Lifecycle Status"}, "required": false, "description": "Filter by lifecycle status. Pass repeated query params (?lifecycle_status=delivered&lifecycle_status=cancelled)."}, {"in": "query", "name": "archived", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter by archive flag.", "q": "is_archived", "title": "Archived"}, "required": false, "description": "Filter by archive flag."}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set - match ANY tag in this set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set - match ANY tag in this set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set - match ANY tag in this set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set - match ANY tag in this set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set - match ANY tag in this set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set - match ANY tag in this set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProjectsList"}}}}}, "description": "List projects for a specific organization (subtenant). Shows all projects\nwhere the organization is the customer. Filterable by lifecycle status and\narchive flag for the Closed and Archived tabs on the org page.", "tags": ["projects"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/generate_upload_url_user_avatar": {"post": {"operationId": "generate_upload_url_user_avatar", "summary": "Generate Upload Url User Avatar", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Upload your avatar: a JPG, PNG, GIF or WebP picture, cropped square, shown in every\nworkspace where you have not set one of your own. A new upload replaces the previous one.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/mark_user_avatar_as_deleted": {"post": {"operationId": "mark_user_avatar_as_deleted", "summary": "Mark User Avatar As Deleted", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove your avatar: you show your initials again, except in workspaces where you set\nan avatar of your own. The uploaded file is moved to the trash.", "tags": ["cdn"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_member_avatar": {"post": {"operationId": "generate_upload_url_member_avatar", "summary": "Generate Upload Url Member Avatar", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Upload your avatar for this workspace: a JPG, PNG, GIF or WebP picture, cropped square.\nIt replaces your avatar here, and a new upload replaces the previous one.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_member_avatar_as_deleted": {"post": {"operationId": "mark_member_avatar_as_deleted", "summary": "Mark Member Avatar As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove your avatar for this workspace: you show your own avatar again, or your\ninitials. The uploaded file is moved to the trash.", "tags": ["cdn"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_tenant_branding": {"post": {"operationId": "generate_upload_url_tenant_branding", "summary": "Generate Upload Url Tenant Branding", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Upload the workspace logo: a JPG, PNG, GIF or WebP picture, cropped square, shown to\nyour team, your customers and your partners. A new upload replaces the previous one.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_tenant_branding_as_deleted": {"post": {"operationId": "mark_tenant_branding_as_deleted", "summary": "Mark Tenant Branding As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove the workspace logo: the workspace shows the default logo again. The uploaded\nfile is moved to the trash.", "tags": ["cdn"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_catalog_picture/{catalog_id}": {"post": {"operationId": "generate_upload_url_catalog_picture", "summary": "Generate Upload Url Catalog Picture", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "catalog_id", "schema": {"title": "Catalog Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Upload the picture of a catalog item: a JPG, PNG, GIF or WebP image, shown as a square thumbnail\nwherever the item is listed, including your customers' and partners' portals. A new upload\nreplaces the previous picture.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_catalog_picture_as_deleted/{catalog_id}": {"post": {"operationId": "mark_catalog_picture_as_deleted", "summary": "Mark Catalog Picture As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "catalog_id", "schema": {"title": "Catalog Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove the picture of a catalog item. The item shows a placeholder again wherever it\nis listed, and the uploaded file is moved to the trash.", "tags": ["cdn"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_org/{org_id}": {"post": {"operationId": "generate_upload_url_org", "summary": "Generate Upload Url Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Upload documents and files specific to customer organizations. Store contracts,\nagreements, and customer-specific resources. Files are isolated per organization\nfor data security. The 15-minute upload window ensures secure, controlled access.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_org/{org_id}": {"post": {"operationId": "generate_download_url_org", "summary": "Generate Download Url Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access organization files with time-limited secure URLs. Downloads expire after\n1 minute for security. Perfect for sharing sensitive customer documents while\nmaintaining audit trails. Path validation ensures access to authorized files only.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_org_file_as_deleted/{org_id}": {"post": {"operationId": "mark_org_file_as_deleted", "summary": "Mark Org File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_proposal/{proposal_id}": {"post": {"operationId": "generate_upload_url_proposal", "summary": "Generate Upload Url Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Attach supporting documents to project proposals. Upload specifications, designs,\nbudgets, and reference materials. All files become part of the project record.\nOrganize documentation to support decision-making and project execution.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_proposal/{proposal_id}": {"post": {"operationId": "generate_download_url_proposal", "summary": "Generate Download Url Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access project proposal documents for review or sharing. Time-limited URLs\nensure controlled distribution of project materials. Share with stakeholders\nwhile maintaining security and tracking access patterns.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_proposal_file_as_deleted/{proposal_id}": {"post": {"operationId": "mark_proposal_file_as_deleted", "summary": "Mark Proposal File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_resource/{resource_id}": {"post": {"operationId": "generate_upload_url_resource", "summary": "Generate Upload Url Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Attach documentation to resources like equipment, facilities, or tools. Upload\nmanuals, maintenance records, certifications, and usage guidelines. Centralize\nresource information for easy team access and compliance tracking.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_resource/{resource_id}": {"post": {"operationId": "generate_download_url_resource", "summary": "Generate Download Url Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access resource documentation when needed for operations or maintenance.\nQuick access to manuals, specifications, and compliance certificates. Essential\nfor troubleshooting, training, or regulatory inspections.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_resource_file_as_deleted/{resource_id}": {"post": {"operationId": "mark_resource_file_as_deleted", "summary": "Mark Resource File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_internal_support_request/{support_request_id}": {"post": {"operationId": "generate_upload_url_internal_support_request", "summary": "Generate Upload Url Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Attach screenshots, logs, or documents to internal support tickets. Provide\ncontext for faster issue resolution. Support staff can access all attachments\nto understand and resolve problems efficiently.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_internal_support_request/{support_request_id}": {"post": {"operationId": "generate_download_url_internal_support_request", "summary": "Generate Download Url Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access support ticket attachments for troubleshooting and resolution. Review\nerror logs, screenshots, and documentation provided by requesters. Essential\nfor understanding issues and providing accurate solutions.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_internal_support_request_file_as_deleted/{support_request_id}": {"post": {"operationId": "mark_internal_support_request_file_as_deleted", "summary": "Mark Internal Support Request File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_internal_support_request_own/{support_request_id}": {"post": {"operationId": "generate_upload_url_internal_support_request_own", "summary": "Generate Upload Url Internal Support Request Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Upload files to your own support tickets without full support permissions.\nAdd clarifying documents, updated screenshots, or additional context to help\nresolve your issue faster. Limited to tickets you created.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_internal_support_request_own/{support_request_id}": {"post": {"operationId": "generate_download_url_internal_support_request_own", "summary": "Generate Download Url Internal Support Request Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access files from your own support tickets. Review what you've submitted or\ndownload responses from support staff. Maintains privacy while allowing\nself-service access to your ticket history.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_project_work_item/{work_item_id}": {"post": {"operationId": "generate_upload_url_project_work_item", "summary": "Generate Upload Url Project Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Attach documents, specifications, and deliverables to project work items. Upload\ndesign files, test results, progress reports, and technical documentation.\nFiles become part of the project record for tracking and compliance.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_project_work_item/{work_item_id}": {"post": {"operationId": "generate_download_url_project_work_item", "summary": "Generate Download Url Project Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access work item attachments for project execution and review. Download\nspecifications, deliverables, and progress documentation. Essential for\nproject collaboration and stakeholder communication.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_project_work_item_file_as_deleted/{work_item_id}": {"post": {"operationId": "mark_project_work_item_file_as_deleted", "summary": "Mark Project Work Item File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_operational_work_item/{work_item_id}": {"post": {"operationId": "generate_upload_url_operational_work_item", "summary": "Generate Upload Url Operational Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Upload documents for operational work items including procedures, checklists,\nand compliance records. Attach standard operating procedures, maintenance logs,\nand regulatory documentation for ongoing operational activities.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_operational_work_item/{work_item_id}": {"post": {"operationId": "generate_download_url_operational_work_item", "summary": "Generate Download Url Operational Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access operational work item documentation for daily activities and compliance.\nDownload procedures, checklists, and reports needed for operational tasks.\nCritical for maintaining operational standards and regulatory compliance.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_operational_work_item_file_as_deleted/{work_item_id}": {"post": {"operationId": "mark_operational_work_item_file_as_deleted", "summary": "Mark Operational Work Item File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_rfp/{rfp_id}": {"post": {"operationId": "generate_upload_url_rfp", "summary": "Generate Upload Url Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Upload files to an RFP for sharing with partners during the solicitation process.\nAttach supporting documents, specifications, or requirements. The secure URL\nexpires in 15 minutes - upload immediately after generation.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_rfp/{rfp_id}": {"post": {"operationId": "generate_download_url_rfp", "summary": "Generate Download Url Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Download files attached to an RFP. Access specifications, requirements, and\nsupporting documents. The secure URL expires after 1 minute for security.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_rfp_file_as_deleted/{rfp_id}": {"post": {"operationId": "mark_rfp_file_as_deleted", "summary": "Mark Rfp File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_internal_support_request_file_as_deleted_own/{support_request_id}": {"post": {"operationId": "mark_internal_support_request_file_as_deleted_own", "summary": "Mark Internal Support Request File As Deleted Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_external_support_request/{support_request_id}": {"post": {"operationId": "generate_upload_url_external_support_request", "summary": "Generate Upload Url External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Attach screenshots, logs, or documents to external support tickets from customers.\nProvide context for faster issue resolution. Support staff can access all\nattachments to understand and resolve customer problems efficiently.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_external_support_request/{support_request_id}": {"post": {"operationId": "generate_download_url_external_support_request", "summary": "Generate Download Url External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access external support ticket attachments for troubleshooting and resolution.\nReview error logs, screenshots, and documentation provided by customers.\nEssential for understanding issues and providing accurate solutions.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_external_support_request_file_as_deleted/{support_request_id}": {"post": {"operationId": "mark_external_support_request_file_as_deleted", "summary": "Mark External Support Request File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_upload_url_external_support_request_own/{support_request_id}": {"post": {"operationId": "generate_upload_url_external_support_request_own", "summary": "Generate Upload Url External Support Request Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Upload files to your own external support tickets from customer portal without\nfull support permissions. Add clarifying documents, updated screenshots, or\nadditional context to help resolve your issue faster. Limited to tickets you created.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_download_url_external_support_request_own/{support_request_id}": {"post": {"operationId": "generate_download_url_external_support_request_own", "summary": "Generate Download Url External Support Request Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}}, "description": "Access files from your own external support tickets in customer portal. Review\nwhat you've submitted or download responses from support staff. Maintains privacy\nwhile allowing self-service access to your ticket history.", "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/mark_external_support_request_file_as_deleted_own/{support_request_id}": {"post": {"operationId": "mark_external_support_request_file_as_deleted_own", "summary": "Mark External Support Request File As Deleted Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["cdn"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_files/{org_id}": {"get": {"operationId": "org_files", "summary": "Org Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Access all documents associated with an organization including contracts, agreements,\nand correspondence. Returns secure signed URLs valid for limited time to prevent\nunauthorized sharing. Files inherit organization permissions - users who can view\nthe organization can access its documents. Essential for due diligence and client\ndocumentation management.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_files/{proposal_id}": {"get": {"operationId": "proposal_files", "summary": "Proposal Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Retrieve proposal attachments including statements of work, pricing sheets, and\nsupporting documentation. Critical for sales processes and contract negotiations.\nVersion control through file naming conventions recommended. Access controlled by\nproposal visibility permissions to protect competitive information.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_files/{resource_id}": {"get": {"operationId": "resource_files", "summary": "Resource Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Access resource-specific documentation such as specifications, manuals, certifications,\nor training materials. Maintains single source of truth for resource information.\nUseful for onboarding, compliance verification, and operational reference. Files\nfollow resource access permissions automatically.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request_files/{support_request_id}": {"get": {"operationId": "internal_support_request_files", "summary": "Internal Support Request Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "View all attachments for internal support tickets including screenshots, logs, and\ndiagnostic files. Essential for troubleshooting and issue resolution. Files provide\ncontext that text descriptions cannot capture. Access restricted to support team\nmembers with appropriate permissions.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request_files_own/{support_request_id}": {"get": {"operationId": "internal_support_request_files_own", "summary": "Internal Support Request Files Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Allow support ticket creators to access files from their own requests regardless of\ngeneral support permissions. Ensures requesters can always retrieve documentation\nthey submitted. Limited to tickets where user is the original requester. Promotes\nself-service and reduces support burden.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request_files/{support_request_id}": {"get": {"operationId": "external_support_request_files", "summary": "External Support Request Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "View all attachments for external support tickets including screenshots, logs, and\ndiagnostic files submitted by customers. Essential for troubleshooting and issue\nresolution. Files provide context that text descriptions cannot capture. Access\nrestricted to support team members with appropriate permissions.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request_files_own/{support_request_id}": {"get": {"operationId": "external_support_request_files_own", "summary": "External Support Request Files Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Allow external support ticket creators (customers) to access files from their own\nrequests regardless of general support permissions. Ensures requesters can always\nretrieve documentation they submitted. Limited to tickets where user is the original\nrequester. Promotes self-service in customer portal and reduces support burden.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/project_work_item_files/{work_item_id}": {"get": {"operationId": "project_work_item_files", "summary": "Project Work Item Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Access all documents attached to project work items including specifications, designs,\ntest results, and deliverables. Files are organized by work item for easy reference\nduring project execution. Essential for tracking work progress and maintaining\nproject documentation. Access controlled by project work item permissions.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/operational_work_item_files/{work_item_id}": {"get": {"operationId": "operational_work_item_files", "summary": "Operational Work Item Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "View documents associated with operational work items including procedures, checklists,\nreports, and compliance documentation. Supports day-to-day operational tasks outside\nof formal projects. Access controlled by operational work item permissions. Critical\nfor maintaining operational excellence and standard operating procedures.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/rfp_files/{rfp_id}": {"get": {"operationId": "rfp_files", "summary": "Rfp Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Access all documents attached to an RFP including specifications, requirements,\nand supporting materials. Returns secure signed URLs valid for limited time.\nFiles are shared with partners who have received this RFP as a solicitation.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/files_storage_metrics": {"get": {"operationId": "files_storage_metrics", "summary": "Files Storage Metrics", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FilesStorageMetrics"}}}}}, "description": "Monitor overall storage consumption and file activity across your workspace. Track\ntotal storage usage against quotas, daily upload patterns, and active user engagement.\nEssential for capacity planning and identifying unusual storage spikes that might\nindicate issues. Helps optimize storage costs by understanding usage patterns.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/files_entity_storage": {"get": {"operationId": "files_entity_storage", "summary": "Files Entity Storage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FilesEntityStorage"}}}}}, "description": "Analyze storage distribution across different entity types to understand where\ndocuments accumulate. Identifies whether storage is consumed by client files,\nproposals, resources, or support tickets. Helps establish retention policies and\narchival strategies based on actual usage patterns.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/top_orgs_by_storage": {"get": {"operationId": "top_orgs_by_storage", "summary": "Top Orgs By Storage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "top", "schema": {"default": 10, "title": "Top", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTopEntitiesByStorage"}}}}}, "description": "Identify organizations consuming the most storage to focus optimization efforts.\nLarge storage usage might indicate active clients, comprehensive documentation, or\npotential cleanup opportunities. Use for client billing if storage-based pricing\napplies. Helps prioritize archival or migration initiatives.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/top_proposals_by_storage": {"get": {"operationId": "top_proposals_by_storage", "summary": "Top Proposals By Storage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "top", "schema": {"default": 10, "title": "Top", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTopEntitiesByStorage"}}}}}, "description": "Find proposals with largest document collections to understand sales documentation\npatterns. High storage proposals might indicate complex deals requiring extensive\nsupporting materials. Useful for identifying proposals that need archival after\ndecision or conversion to project documentation.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/top_resources_by_storage": {"get": {"operationId": "top_resources_by_storage", "summary": "Top Resources By Storage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "top", "schema": {"default": 10, "title": "Top", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTopEntitiesByStorage"}}}}}, "description": "Discover resources with extensive documentation libraries such as equipment manuals,\ncertifications, or training materials. High storage resources might need document\nmanagement strategies. Helps identify resources requiring special backup or archival\nconsideration.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/top_support_requests_by_storage": {"get": {"operationId": "top_support_requests_by_storage", "summary": "Top Support Requests By Storage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "top", "schema": {"default": 10, "title": "Top", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTopEntitiesByStorage"}}}}}, "description": "Locate support tickets with large attachment volumes indicating complex issues or\nextensive troubleshooting. High storage tickets might contain logs, dumps, or\nrecordings requiring special retention. Useful for identifying tickets that need\nknowledge base extraction before archival.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/top_project_work_items_by_storage": {"get": {"operationId": "top_project_work_items_by_storage", "summary": "Top Project Work Items By Storage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "top", "schema": {"default": 10, "title": "Top", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTopEntitiesByStorage"}}}}}, "description": "Identify project work items consuming the most storage to focus optimization efforts.\nLarge storage usage might indicate comprehensive documentation, test results, or\ndeliverables. Use for project resource planning and archival decisions. Helps\nprioritize cleanup after project completion.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/top_operational_work_items_by_storage": {"get": {"operationId": "top_operational_work_items_by_storage", "summary": "Top Operational Work Items By Storage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "top", "schema": {"default": 10, "title": "Top", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTopEntitiesByStorage"}}}}}, "description": "Discover operational work items with extensive documentation such as procedures,\nchecklists, or compliance records. High storage items might need document\nmanagement strategies. Helps identify operational processes requiring special\nbackup or archival consideration.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tenant_trash_files": {"get": {"operationId": "tenant_trash_files", "summary": "Tenant Trash Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantTrashFiles"}}}}}, "description": "Browse all files currently in trash pending permanent deletion. Critical for recovery\nof accidentally deleted documents before automatic cleanup. Shows deletion timestamp\nand remaining recovery time. Regular review prevents important documents from being\npermanently lost. Empty trash to immediately free storage if needed.", "tags": ["files"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/cost_types": {"get": {"operationId": "tenant_cost_types", "summary": "Tenant Cost Types", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantCostTypes"}}}}}, "description": "View your complete cost structure hierarchy to understand expense categorization.\nReturns the entire tree from root to leaf nodes, showing parent-child relationships.\nEssential for configuring project costing, expense tracking, and financial reporting.\nThe structure drives cost allocation throughout the platform.", "tags": ["costs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_cost_type": {"post": {"operationId": "add_cost_type", "summary": "Add Cost Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a cost type under an existing one, to break your costs down in more detail. The internal\ncode helps you match it to your accounting. Cost types go at most 5 levels deep.", "tags": ["costs"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddCostType"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_cost_type/{cost_type_id}": {"patch": {"operationId": "edit_cost_type", "summary": "Edit Cost Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "cost_type_id", "schema": {"title": "Cost Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update cost categories when your financial structure evolves. Change names for\nclarity, update internal codes for system integration, or move categories to\ndifferent parents for reorganization. Changes apply immediately to all future\ncost allocations while preserving historical data.", "tags": ["costs"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditCostType"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/move_cost_type_up/{cost_type_id}": {"patch": {"operationId": "reorder_cost_type_up", "summary": "Reorder Cost Type Up", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "cost_type_id", "schema": {"title": "Cost Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move a cost type up within its sibling group for display ordering. Affects how\ncategories appear in dropdown lists and reports. Useful for prioritizing\nfrequently used categories or matching your chart of accounts sequence.", "tags": ["costs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/move_cost_type_down/{cost_type_id}": {"patch": {"operationId": "reorder_cost_type_down", "summary": "Reorder Cost Type Down", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "cost_type_id", "schema": {"title": "Cost Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move a cost type down within its sibling group for display ordering. Adjusts\nthe visual hierarchy in user interfaces and reports. Helps maintain logical\ngroupings that match your business processes.", "tags": ["costs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_cost_type/{cost_type_id}": {"delete": {"operationId": "delete_cost_type", "summary": "Delete Cost Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "cost_type_id", "schema": {"title": "Cost Type Id", "type": "string"}, "required": true}, {"in": "query", "name": "delete_descendants", "schema": {"default": false, "title": "Delete Descendants", "type": "boolean"}, "required": false}, {"in": "query", "name": "reparent_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reparent Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete cost categories from your structure. Choose to delete all\nsubcategories or reparent them to preserve the hierarchy. Cannot delete if\ncosts are already allocated to this type - ensures financial data integrity.\nConsider deactivating instead of deleting for audit trail preservation.", "tags": ["costs"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_types": {"get": {"operationId": "tenant_resources", "summary": "Tenant Resources", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by name or internal code", "q": ["name__icontains", "internal_code__icontains"], "title": "Search"}, "required": false, "description": "Search by name or internal code"}, {"in": "query", "name": "name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource name", "q": "name__icontains", "title": "Name"}, "required": false, "description": "Filter by resource name"}, {"in": "query", "name": "internal_code", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by exact internal code", "q": "internal_code__iexact", "title": "Internal Code"}, "required": false, "description": "Filter by exact internal code"}, {"in": "query", "name": "timezone", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by timezone", "q": "timezone__exact", "title": "Timezone"}, "required": false, "description": "Filter by timezone"}, {"in": "query", "name": "is_bookable", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter bookable resources (leaf nodes)", "q": "is_parent", "title": "Is Bookable"}, "required": false, "description": "Filter bookable resources (leaf nodes)"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantResourceTypes"}}}}}, "description": "View your complete resource hierarchy organized by type and category. Returns the\nentire resource tree from departments to individual assets. Essential for resource\nplanning, capacity analysis, and organizational structure visualization. Use to\nidentify resource gaps and optimization opportunities. Supports filtering by name,\ninternal code, bookability status, and timezone.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_resource": {"post": {"operationId": "add_resource", "summary": "Add Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a resource you book and cost on projects, such as equipment, a room or a vehicle, under a\nparent resource. Only resources with nothing under them can be booked, so adding one under\nanother makes the parent a group.", "tags": ["resources"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddResource"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_resource/{resource_id}": {"patch": {"operationId": "edit_resource", "summary": "Edit Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update resource details when capabilities, availability, or organizational structure\nchanges. Modifications apply to future allocations while preserving historical data.\nChanges to parent relationships reorganize your resource hierarchy. Review dependent\nproposals and projects before making structural changes.", "tags": ["resources"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditResource"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/move_resource_up/{resource_id}": {"patch": {"operationId": "reorder_resource_up", "summary": "Reorder Resource Up", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Adjust resource display order within its category for prioritization. Higher\nposition indicates greater importance or frequency of use. Affects how resources\nappear in selection lists and reports. Useful for highlighting preferred resources\nor equipment.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/move_resource_down/{resource_id}": {"patch": {"operationId": "reorder_resource_down", "summary": "Reorder Resource Down", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Lower resource priority in display ordering within its category. Moves less\nfrequently used or backup resources down in lists. Helps users find primary\nresources quickly while maintaining complete catalog visibility.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_resource/{resource_id}": {"delete": {"operationId": "delete_resource", "summary": "Delete Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}, {"in": "query", "name": "delete_descendants", "schema": {"default": false, "title": "Delete Descendants", "type": "boolean"}, "required": false}, {"in": "query", "name": "reparent_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reparent Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove resources from your catalog when no longer available or needed. Choose to\ndelete entire branches or reparent sub-resources to preserve structure. Cannot\ndelete resources with active allocations in projects. Historical data remains for\ncompleted work. Consider deactivation instead of deletion for temporary unavailability.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_resource_cost": {"post": {"operationId": "add_resource_cost", "summary": "Add Resource Cost", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Set what a resource costs, per hour, per day or per unit, for one cost type. The new rate\napplies from now and replaces the previous rate for that cost type. Costs set this way feed the\nproject margin.", "tags": ["resources"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddResourceCost"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_costs/{resource_id}": {"get": {"operationId": "resource_costs", "summary": "Resource Costs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceCostTypes"}}}}}, "description": "View all cost rates configured for a resource across different cost categories.\nShows current and historical rates with effective date ranges. Essential for\nunderstanding resource economics and pricing decisions. Includes both active and\ninactive rates for complete cost history.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_cost/{resource_id}/{cost_type_id}": {"get": {"operationId": "resource_cost", "summary": "Resource Cost", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}, {"in": "path", "name": "cost_type_id", "schema": {"title": "Cost Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceCostOutput"}}}}}, "description": "Examine detailed cost history for a specific resource and cost type combination.\nShows rate evolution over time with correction audit trail. Critical for historical\nproject cost analysis and rate validation. Includes all adjustments and corrections\nfor accurate financial reconciliation.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_cost_correction/{resource_cost_id}": {"post": {"operationId": "resource_cost_correction", "summary": "Resource Cost Correction", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_cost_id", "schema": {"title": "Resource Cost Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Correct historical cost rates when errors are discovered or retroactive adjustments\nare needed. Creates audit trail while preserving original entries for compliance.\nCorrections can trigger project cost recalculations and margin updates. Document\ncorrection reasons for financial audit requirements.", "tags": ["resources"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceCostCorrection"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/deactivate_resource_cost/{resource_cost_id}": {"patch": {"operationId": "deactivate_resource_cost", "summary": "Deactivate Resource Cost", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_cost_id", "schema": {"title": "Resource Cost Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Temporarily disable cost rates without deletion for seasonal resources or rate\nnegotiations. Deactivated rates remain in history but aren't used for new\nallocations. Useful during rate reviews or when resources are temporarily\nunavailable. Can be reactivated when needed.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_resource_cost/{resource_cost_id}": {"delete": {"operationId": "delete_resource_cost", "summary": "Delete Resource Cost", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_cost_id", "schema": {"title": "Resource Cost Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Permanently remove incorrect or obsolete cost rates from the system. Use sparingly\nas deletion affects historical cost calculations. Consider deactivation or\ncorrection instead for audit trail preservation. Cannot delete rates used in\nprocessed financial transactions.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_lost_proposals/{resource_id}": {"get": {"operationId": "resource_lost_proposals", "summary": "Resource Lost Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FunnelLostProposals"}}}}}, "description": "Analyze proposals lost due to specific resource constraints or availability issues.\nIdentifies patterns where resource limitations impact sales success. Critical for\ncapacity planning and investment decisions. Shows opportunity cost of resource\nconstraints to justify expansion or alternatives.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_load/{resource_id}": {"get": {"operationId": "resource_load", "summary": "Resource Load", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceLoadDetailSchema"}}}}}, "description": "View resource utilization and load analysis. Shows current and projected workload\nfor the resource across all active projects and proposals. Helps identify\nover-allocation and available capacity. Essential for resource planning and\noptimization decisions.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_usage_histogram/{resource_id}": {"get": {"operationId": "resource_usage_histogram", "summary": "Resource Usage Histogram", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceUsageHistogramSchema"}}}}}, "description": "Get weekly planned resource usage for the next 12 weeks. Aggregates ResourceBooking\ndata by week to show planned utilization trends. Used for capacity planning and\nresource allocation visualization. Shows zero for weeks without bookings to maintain\nconsistent chart display. Essential for identifying future resource bottlenecks.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_usage_datatable/{resource_id}": {"get": {"operationId": "resource_usage_datatable", "summary": "Resource Usage Datatable", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceUsageDatatableSchema"}}}}}, "description": "View actual resource usage records from active projects. Shows WorkResourceUsage\nentries sorted by date (future first) for resource consumption tracking. Excludes\nprojects in \"Closed: Lost\" stage to focus on active work. Links to projects and\nteam members are conditional based on user's project:view permission. Critical\nfor resource utilization analysis and audit trails.", "tags": ["resources"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/exchange_rates": {"get": {"operationId": "tenant_exchange_rates", "summary": "Tenant Exchange Rates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputExchangeRates"}}}}}, "description": "View all configured exchange rates for multi-currency operations. Returns rates\nfrom your base currency to all configured foreign currencies. Essential for\nfinancial planning, international pricing strategies, and understanding currency\nexposure. Rates display with their effective dates for historical tracking.", "tags": ["exchange"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/exchange": {"post": {"operationId": "add_exchange", "summary": "Add Exchange", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add an exchange rate for a pair of currencies, valid from a date. It ends the rate in use before\nit. A pair is kept in one direction only, and a new rate cannot start inside a period already\ncovered.", "tags": ["exchange"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExchange"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/exchange/{rate_id}": {"put": {"operationId": "edit_exchange", "summary": "Edit Exchange", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rate_id", "schema": {"title": "Rate Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change an exchange rate or the period it is valid for. Reports for that period use the new rate;\nproposal lines keep the rate they were priced with. Leave the end date empty for a rate with no\nend.", "tags": ["exchange"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditExchange"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_exchange", "summary": "Delete Exchange", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rate_id", "schema": {"title": "Rate Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete an exchange rate. You can delete only the latest rate of a pair, and not while its\ncurrencies are in use in projects, the catalog or costs.", "tags": ["exchange"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/me": {"get": {"operationId": "api_me", "summary": "Api Me", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMe"}}}}}, "description": "Returns the authenticated user's identity and workspace info.\nUse this to verify API credentials and discover the workspace context.", "tags": ["auth"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/user_api_keys": {"get": {"operationId": "user_api_keys", "summary": "User Api Keys", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputApiKeyList"}}}}}, "description": "View your active API keys to manage integrations and monitor access.\nUse this to audit which keys exist and when they expire.", "tags": ["auth"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_api_key": {"post": {"operationId": "add_api_key", "summary": "Add Api Key", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiKeyCreated"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Generate a new API key for automating workflows or connecting external tools.\nThe key value appears only once - store it securely immediately. Consider setting\nan expiration date for keys used in temporary integrations or testing.", "tags": ["auth"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddApiKey"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_api_key/{api_key_id}": {"patch": {"operationId": "edit_api_key", "summary": "Edit Api Key", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "api_key_id", "schema": {"title": "Api Key Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Adjust API key permissions when integration requirements change. Reduce permissions\nto follow least-privilege principles or extend expiration for long-running projects.\nChanges take effect immediately for all systems using this key.", "tags": ["auth"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditApiKey"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_api_key/{api_key_id}": {"delete": {"operationId": "delete_api_key", "summary": "Delete Api Key", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "api_key_id", "schema": {"title": "Api Key Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Revoke a compromised or unused API key to maintain security. Deletion is immediate\nand permanent - all integrations using this key will stop working. Create a new key\nbefore deletion if you need to rotate credentials.", "tags": ["auth"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/calendar/tokens": {"get": {"operationId": "list_calendar_tokens", "summary": "List Calendar Tokens", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCalendarTokens"}}}}}, "description": "View your active calendar subscriptions to manage integrations across different\ncalendar views. Monitor which feeds are in use, when they were last accessed,\nand identify unused subscriptions that could be revoked for security.", "tags": ["calendar"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/calendar/token": {"post": {"operationId": "create_calendar_token", "summary": "Create Calendar Token", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a subscription link for an external calendar app, for a team member, a resource, a\nproject or a customer. Anyone with the link can read that calendar without signing in, so share\nit only with apps you trust.", "tags": ["calendar"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateCalendarToken"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/calendar/token/{token_id}": {"delete": {"operationId": "revoke_calendar_token", "summary": "Revoke Calendar Token", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "token_id", "schema": {"title": "Token Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Immediately disable a calendar subscription link to prevent further access.\nUse when switching calendar applications, cleaning up unused integrations,\nor if a subscription URL may have been compromised. Existing calendar data\nin external apps won't update after revocation but won't be automatically removed.", "tags": ["calendar"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/holidays": {"get": {"operationId": "list_holidays", "summary": "List Holidays", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputHolidays"}}}}}, "description": "View all configured holidays across different territories and regions. Returns dates\nwith territory associations for managing international teams. Essential for understanding\nblocked dates when planning projects or scheduling meetings. Sorted by date to easily\nidentify upcoming non-working periods that impact deadlines.", "tags": ["holidays"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/holiday": {"post": {"operationId": "add_holiday", "summary": "Add Holiday", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a public holiday or a day off for a territory. It applies to the team members in that\nterritory and shows in their calendars and in the team load.", "tags": ["holidays"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddHoliday"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/holiday/{holiday_id}": {"patch": {"operationId": "edit_holiday", "summary": "Edit Holiday", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "holiday_id", "schema": {"title": "Holiday Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change a holiday's date, name or territory, for example for a holiday that moves every year, or\nto fix a mistake.", "tags": ["holidays"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditHoliday"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_holiday", "summary": "Delete Holiday", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "holiday_id", "schema": {"title": "Holiday Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a holiday that no longer applies or was entered by mistake. The day becomes a working day\nagain in calendars and in the team load.", "tags": ["holidays"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/team_bookings/{proposal_id}": {"get": {"operationId": "proposal_team_bookings", "summary": "Proposal Team Bookings", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTeamBookings"}}}}}, "description": "View team allocation for a project to understand staffing and identify gaps.\nShows who's assigned, their booking periods, and linked deliverables. Essential\nfor project managers to ensure adequate staffing throughout the project lifecycle.", "tags": ["booking"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_team_booking": {"post": {"operationId": "add_team_booking", "summary": "Add Team Booking", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Book a team member on a project for a period, optionally on a specific deliverable. A booking\ncannot take them past their daily availability. They are notified unless they booked themselves.", "tags": ["booking"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddTeamBooking"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_team_booking/{booking_id}": {"put": {"operationId": "edit_team_booking", "summary": "Edit Team Booking", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "booking_id", "schema": {"title": "Booking Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change a team member's booking: the dates, the hours per day or the deliverable. The change is\nchecked against their availability again. If you book someone else, both are notified.", "tags": ["booking"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTeamBooking"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_team_booking/{booking_id}": {"delete": {"operationId": "delete_team_booking", "summary": "Delete Team Booking", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "booking_id", "schema": {"title": "Booking Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Cancel a team member's booking. Their hours are free for other work right away, and they are\nnotified unless they cancelled it themselves.", "tags": ["booking"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_bookings/{proposal_id}": {"get": {"operationId": "proposal_resource_bookings", "summary": "Proposal Resource Bookings", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputResourceBookings"}}}}}, "description": "Review equipment, room, and asset reservations for a project. Monitor resource\nutilization and identify potential conflicts. Only shows bookings for concrete\nresources (e.g., 'Conference Room A'), not categories, ensuring accurate availability.", "tags": ["booking"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_resource_booking": {"post": {"operationId": "add_resource_booking", "summary": "Add Resource Booking", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Book equipment, a room or another resource for a project. A booking cannot take the resource\npast its daily availability. You can book only a specific resource, not a group of resources.", "tags": ["booking"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddResourceBooking"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_resource_booking/{booking_id}": {"put": {"operationId": "edit_resource_booking", "summary": "Edit Resource Booking", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "booking_id", "schema": {"title": "Booking Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change a resource booking: the resource, the dates or the hours per day. The change is checked\nagainst the resource's availability again.", "tags": ["booking"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditResourceBooking"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_resource_booking/{booking_id}": {"delete": {"operationId": "delete_resource_booking", "summary": "Delete Resource Booking", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "booking_id", "schema": {"title": "Booking Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Cancel a resource booking. Its hours are free for other projects right away.", "tags": ["booking"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/support_request_types": {"get": {"operationId": "list_support_request_types", "summary": "List Support Request Types", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSupportRequestTypes"}}}}}, "description": "View all configured support request types defining issue categories and workflows.\nTypes determine routing rules, default severities, and resolution processes.\nEssential for understanding available categories before request creation.\nReview types regularly to ensure they match your operational needs.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/support_request_type/{type_id}": {"get": {"operationId": "get_support_request_type", "summary": "Get Support Request Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "type_id", "schema": {"title": "Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSupportRequestType"}}}}}, "description": "Examine detailed configuration of a specific request type including routing rules.\nShows associated queues, default assignments, and escalation paths.\nCritical for understanding how requests of this type will be handled.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_support_request_type": {"post": {"operationId": "add_support_request_type", "summary": "Add Support Request Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a type of support request, internal or external. The name must be unique among types of the\nsame kind. Queue rules can send requests to a queue by their type.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddSupportRequestType"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_support_request_type/{type_id}": {"patch": {"operationId": "edit_support_request_type", "summary": "Edit Support Request Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "type_id", "schema": {"title": "Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update request type definitions when support processes evolve or improve.\nModify routing rules, descriptions, or default assignments. Changes apply\nto new requests only - existing requests maintain original configuration.\nReview impact on queue routing before making changes.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditSupportRequestType"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_support_request_type/{type_id}": {"delete": {"operationId": "delete_support_request_type", "summary": "Delete Support Request Type", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "type_id", "schema": {"title": "Type Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete request types when categories are no longer relevant.\nCannot delete types with active requests - close or reassign them first.\nHistorical requests retain their type for reporting. Consider deactivation\ninstead of deletion to preserve configuration history.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/support_request_severities": {"get": {"operationId": "list_support_request_severities", "summary": "List Support Request Severities", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSupportRequestSeverities"}}}}}, "description": "View all severity levels defining urgency and response time expectations.\nSeverities drive prioritization and escalation rules.\nEssential for setting customer expectations and resource allocation.\nHigher severities typically trigger faster response requirements.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/support_request_severity/{severity_id}": {"get": {"operationId": "get_support_request_severity", "summary": "Get Support Request Severity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "severity_id", "schema": {"title": "Severity Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSupportRequestSeverity"}}}}}, "description": "Examine specific severity configuration including response times and escalation.\nShows SLA requirements, notification rules, and priority settings.\nCritical for understanding support commitments and resource needs.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_support_request_severity": {"post": {"operationId": "add_support_request_severity", "summary": "Add Support Request Severity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a severity for support requests, internal or external. The name must be unique among\nseverities of the same kind; its score sets how urgent it is.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddSupportRequestSeverity"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_support_request_severity/{severity_id}": {"patch": {"operationId": "edit_support_request_severity", "summary": "Edit Support Request Severity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "severity_id", "schema": {"title": "Severity Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Adjust severity definitions when SLAs change or service levels are refined.\nUpdate response times, descriptions, or escalation rules. Changes affect\nnew requests only - existing requests keep original severity settings.\nCommunicate changes to support teams and customers.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditSupportRequestSeverity"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_support_request_severity/{severity_id}": {"delete": {"operationId": "delete_support_request_severity", "summary": "Delete Support Request Severity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "severity_id", "schema": {"title": "Severity Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove unused severity levels to simplify prioritization decisions.\nCannot delete severities assigned to active requests. Historical data\npreserved for reporting. Ensure remaining severities cover all scenarios\nbefore deletion.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/support_request_statuses": {"get": {"operationId": "list_support_request_statuses", "summary": "List Support Request Statuses", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSupportRequestStatuses"}}}}}, "description": "View all workflow states defining the support request lifecycle from creation to closure.\nStatuses track progress, trigger notifications, and enforce process compliance.\nEssential for understanding request states and available transitions.\nCustom statuses enable workflow tailoring to your support methodology.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/support_request_status/{status_id}": {"get": {"operationId": "get_support_request_status", "summary": "Get Support Request Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "status_id", "schema": {"title": "Status Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSupportRequestStatus"}}}}}, "description": "Examine status configuration including lifecycle position and transition rules.\nShows notification triggers, automation rules, and resolution indicators.\nCritical for understanding workflow progression and status dependencies.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_support_request_status": {"post": {"operationId": "add_support_request_status", "summary": "Add Support Request Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a status for support requests, internal or external. Its lifecycle says whether a request in\nit is new, open or closed. Only one active status of each kind can be the new, the pending\napproval or the closed one.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddSupportRequestStatus"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_support_request_status/{status_id}": {"patch": {"operationId": "edit_support_request_status", "summary": "Edit Support Request Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "status_id", "schema": {"title": "Status Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Refine status definitions when processes mature or requirements change.\nUpdate descriptions, lifecycle indicators, or notification rules.\nCannot change core lifecycle position if requests use this status.\nCommunicate workflow changes to support teams.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditSupportRequestStatus"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_support_request_status/{status_id}": {"delete": {"operationId": "delete_support_request_status", "summary": "Delete Support Request Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "status_id", "schema": {"title": "Status Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove unused workflow states to simplify process management.\nCannot delete statuses assigned to requests. Ensure workflow continuity\nafter removal - no gaps in progression paths. Historical data preserved\nfor audit trails.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/support_request_queues": {"get": {"operationId": "list_support_request_queues", "summary": "List Support Request Queues", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSupportRequestQueues"}}}}}, "description": "View all support queues organizing requests by team, skill, or priority.\nShows queue workload, average resolution times, and team assignments.\nEssential for load balancing and capacity planning. Monitor queue\nmetrics to identify bottlenecks and optimization opportunities.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_support_request_queue": {"post": {"operationId": "add_support_request_queue", "summary": "Add Support Request Queue", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a support queue. Queue rules send new requests to it by type and severity. With automatic\nassignment and an owner role, each new request goes to the member of that role with the fewest\nopen requests.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddSupportRequestQueue"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_support_request_queue/{queue_id}": {"patch": {"operationId": "edit_support_request_queue", "summary": "Edit Support Request Queue", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "queue_id", "schema": {"title": "Queue Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update queue configuration when team structures or responsibilities change.\nModify assignments, descriptions, or routing priorities. Changes affect\nnew request routing - existing requests remain in current queues.\nReview routing rules to ensure proper request distribution.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditSupportRequestQueue"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_support_request_queue/{queue_id}": {"delete": {"operationId": "delete_support_request_queue", "summary": "Delete Support Request Queue", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "queue_id", "schema": {"title": "Queue Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove obsolete queues when teams dissolve or processes consolidate.\nCannot delete queues with active requests - transfer them first.\nEnsure alternative queues exist for affected request types.\nHistorical queue data preserved for reporting.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request": {"post": {"operationId": "add_internal_support_request", "summary": "Add Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Open an internal support request. Its type and severity decide its queue, and the queue may\nassign it to someone automatically. You are notified when someone else changes its status.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddInternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/org/{org_id}": {"post": {"operationId": "add_internal_support_request_for_org", "summary": "Add Internal Support Request For Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Open an internal support request about one of your customers. It goes to a queue by its type and\nseverity, like any internal request.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddInternalSupportRequestForOrg"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/proposal/{proposal_id}": {"post": {"operationId": "add_internal_support_request_for_proposal", "summary": "Add Internal Support Request For Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Open an internal support request about a proposal or project. It is also linked to the customer,\nand goes to a queue by its type and severity.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddInternalSupportRequestForProposal"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/resource/{resource_id}": {"post": {"operationId": "add_internal_support_request_for_resource", "summary": "Add Internal Support Request For Resource", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Open an internal support request about a resource, such as equipment or a room. It goes to a\nqueue by its type and severity.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddInternalSupportRequestForResource"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/work_item/{work_item_id}": {"post": {"operationId": "add_internal_support_request_for_work_item", "summary": "Add Internal Support Request For Work Item", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Open an internal support request about a work item. It goes to a queue by its type and severity.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddInternalSupportRequestForWorkItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request/org/{org_id}": {"post": {"operationId": "tenant_add_external_support_request_for_org", "summary": "Tenant Add External Support Request For Org", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a customer-facing support request on behalf of a specific customer\norganization. Use when a customer calls in and you log the ticket for them.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestForCustomer"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request/project/{project_id}": {"post": {"operationId": "tenant_add_external_support_request_for_project", "summary": "Tenant Add External Support Request For Project", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a customer-facing support request linked to a specific project on\nbehalf of the customer. The customer is derived from the project.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestForCustomer"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request/asset/{asset_id}": {"post": {"operationId": "tenant_add_external_support_request_for_asset", "summary": "Tenant Add External Support Request For Asset", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a customer-facing support request about a specific customer asset on\nbehalf of the customer. The customer is derived from the asset.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestForCustomer"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_support_requests": {"get": {"operationId": "my_support_requests", "summary": "My Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search in title, description, or ticket ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search in title, description, or ticket ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity level", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity level"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assigned team member", "q": "assignee__external_id", "title": "Assignee"}, "required": false, "description": "Filter by assigned team member"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "has_assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assignment status: 'assigned' or 'unassigned'", "title": "Has Assignee"}, "required": false, "description": "Filter by assignment status: 'assigned' or 'unassigned'"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View your submitted support requests currently being processed.\nTrack progress, add comments, and receive resolution updates.\nShows requests across all queues and assignees for complete visibility.\nEssential for following up on pending issues affecting your work.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_closed_support_requests": {"get": {"operationId": "my_closed_support_requests", "summary": "My Closed Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search in title, description, or ticket ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search in title, description, or ticket ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity level", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity level"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assigned team member", "q": "assignee__external_id", "title": "Assignee"}, "required": false, "description": "Filter by assigned team member"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "has_assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assignment status: 'assigned' or 'unassigned'", "title": "Has Assignee"}, "required": false, "description": "Filter by assignment status: 'assigned' or 'unassigned'"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access your resolved support request history for reference and patterns.\nReview solutions for similar future issues. Closed requests can be\nreopened within configured time windows if problems recur.\nUseful for tracking recurring issues or solution effectiveness.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_external_support_requests": {"get": {"operationId": "my_external_support_requests", "summary": "My External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search in title, description, or ticket ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search in title, description, or ticket ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity level", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity level"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assigned team member", "q": "assignee__external_id", "title": "Assignee"}, "required": false, "description": "Filter by assigned team member"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "has_assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assignment status: 'assigned' or 'unassigned'", "title": "Has Assignee"}, "required": false, "description": "Filter by assignment status: 'assigned' or 'unassigned'"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View your submitted external support requests currently being processed.\nTrack customer-facing tickets, monitor resolutions, and manage escalations.\nShows all external tickets you've created across queues and teams.\nEssential for coordinating customer support and tracking issue status.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_closed_external_support_requests": {"get": {"operationId": "my_closed_external_support_requests", "summary": "My Closed External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search in title, description, or ticket ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search in title, description, or ticket ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity level", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity level"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assigned team member", "q": "assignee__external_id", "title": "Assignee"}, "required": false, "description": "Filter by assigned team member"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "has_assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assignment status: 'assigned' or 'unassigned'", "title": "Has Assignee"}, "required": false, "description": "Filter by assignment status: 'assigned' or 'unassigned'"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access your resolved external support request history and solutions.\nReview past customer issues, analyze resolution patterns, and reference\nsolutions for similar future cases. Closed tickets can be reopened\nwithin configured windows if issues resurface.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/assigned_external_support_requests": {"get": {"operationId": "assigned_external_support_requests", "summary": "Assigned External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search in title, description, or ticket ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search in title, description, or ticket ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity level", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity level"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View customer support tickets assigned to you for resolution.\nExternal requests require customer communication and SLA compliance.\nPrioritize based on severity and customer tier. Track time to ensure\nresponse commitments are met.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/assigned_closed_external_support_requests": {"get": {"operationId": "assigned_closed_external_support_requests", "summary": "Assigned Closed External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search in title, description, or ticket ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search in title, description, or ticket ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity level", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity level"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Review your resolved customer tickets for performance evaluation.\nTrack personal resolution metrics and customer satisfaction scores.\nLearn from past successes and challenges. Useful for identifying\npersonal expertise areas and improvement opportunities.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/assigned_internal_support_requests": {"get": {"operationId": "assigned_internal_support_requests", "summary": "Assigned Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search in title, description, or ticket ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search in title, description, or ticket ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity level", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity level"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access internal team requests requiring your expertise or action.\nShows requests across all queues assigned specifically to you.\nFocus on resolution to maintain team productivity. Update status\nregularly to keep requesters informed of progress.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/assigned_closed_internal_support_requests": {"get": {"operationId": "assigned_closed_internal_support_requests", "summary": "Assigned Closed Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search in title, description, or ticket ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search in title, description, or ticket ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity level", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity level"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access your completed internal support work for reference and metrics.\nReview resolution approaches for similar future requests. Track\npersonal productivity and expertise development. Builds knowledge\nrepository for team sharing.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/close_no_longer_required": {"patch": {"operationId": "close_internal_support_request_no_longer_required", "summary": "Close Internal Support Request No Longer Required", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Close a request you opened when you no longer need it. It closes as no longer required, and the\nassignee is notified.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/reopen": {"patch": {"operationId": "reopen_internal_support_request", "summary": "Reopen Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reopen a request you opened, within a day of its last change. It goes back to the new status\nwithout an assignee, and the previous assignee is notified.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}": {"get": {"operationId": "internal_support_request", "summary": "Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputInternalSupportRequest"}}}}}, "description": "View complete request details including description, status, and assignment.\nShows full context for support agents to understand and resolve issues.\nIncludes related entities, timeline, and comment history.\nReal-time updates reflect latest status changes.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request/{support_request_id}": {"get": {"operationId": "external_support_request", "summary": "External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputExternalSupportRequest"}}}}}, "description": "View complete external support request details for customer-facing tickets.\nShows full context including customer information, status, and assignment.\nIncludes related entities, timeline, and comment history.\nReal-time updates reflect latest status changes.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/change_external_support_request_status/{support_request_id}": {"patch": {"operationId": "change_external_support_request_status", "summary": "Change External Support Request Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change the status of an external support request. The requester and the assignee are notified. A\nclosed request can no longer change.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChangeExternalSupportRequestStatus"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reassign_external_support_request/{support_request_id}": {"patch": {"operationId": "reassign_external_support_request", "summary": "Reassign External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Assign an external support request to another team member. The previous assignee, the new one\nand the requester are notified.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReassignExternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/close_external_support_request/{support_request_id}": {"patch": {"operationId": "close_external_support_request", "summary": "Close External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Close an external support request with a resolution. The requester and the assignee are notified\nof the resolution.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CloseExternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/assign_to_me_external_support_request/{support_request_id}": {"patch": {"operationId": "assign_to_me_external_support_request", "summary": "Assign To Me External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Assign an external support request to yourself.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_external_support_request/{support_request_id}": {"patch": {"operationId": "edit_external_support_request", "summary": "Edit External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit the title, description, type or severity of an external support request. The request stays\nin its queue. A closed request can no longer be edited.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditExternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reopen_external_support_request/{support_request_id}": {"patch": {"operationId": "reopen_external_support_request", "summary": "Reopen External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reopen a closed external support request within the allowed time window.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reject_solution_external_support_request/{support_request_id}": {"patch": {"operationId": "reject_solution_external_support_request", "summary": "Reject Solution External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reject proposed solution for external support request.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/accept_solution_external_support_request/{support_request_id}": {"patch": {"operationId": "accept_solution_external_support_request", "summary": "Accept Solution External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Accept proposed solution for external support request and close it.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/close_external_support_request_no_longer_required/{support_request_id}": {"patch": {"operationId": "close_external_support_request_no_longer_required", "summary": "Close External Support Request No Longer Required", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Close external support request as no longer required (requester only).", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_own_external_support_request/{support_request_id}": {"patch": {"operationId": "edit_own_external_support_request", "summary": "Edit Own External Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit a support request you opened, as long as it is not closed.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditExternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/transfer_external_support_request_queue/{support_request_id}": {"patch": {"operationId": "transfer_external_support_request_queue", "summary": "Transfer External Support Request Queue", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move an external support request to another queue. It loses its assignee, and the new queue may\nassign it automatically.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/TransferSupportRequestQueue"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_external_support_request_comment": {"post": {"operationId": "add_external_support_request_comment", "summary": "Add External Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a comment to an external support request. The requester sees it only if you show it to them.\nThe assignee is notified.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_own_external_support_request_comment": {"post": {"operationId": "add_own_external_support_request_comment", "summary": "Add Own External Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a comment to a support request you opened. The assignee is notified.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_external_support_request_comment/{comment_id}": {"patch": {"operationId": "edit_external_support_request_comment", "summary": "Edit External Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit any comment on an external support request, for moderation. The comment is marked as\nedited.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditExternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_own_external_support_request_comment/{comment_id}": {"patch": {"operationId": "edit_own_external_support_request_comment", "summary": "Edit Own External Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit your own external support request comment.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditExternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_external_support_request_comment/{comment_id}": {"delete": {"operationId": "delete_external_support_request_comment", "summary": "Delete External Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete any comment on an external support request, for moderation. Its replies are deleted with\nit, permanently.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_own_external_support_request_comment/{comment_id}": {"delete": {"operationId": "delete_own_external_support_request_comment", "summary": "Delete Own External Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete your own external support request comment.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_support_request/{support_request_id}": {"get": {"operationId": "my_support_request", "summary": "My Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputInternalSupportRequest"}}}}}, "description": "View detailed status of your submitted request with full context.\nTrack progress, see agent notes, and understand next steps.\nReal-time updates show latest changes. Essential for following\nup on critical issues affecting your work.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/change_status": {"patch": {"operationId": "change_internal_support_request_status", "summary": "Change Internal Support Request Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change the status of an internal support request and say why. The requester and the assignee are\nnotified. A closed request can no longer change.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChangeInternalSupportRequestStatus"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/reassign": {"patch": {"operationId": "reassign_internal_support_request", "summary": "Reassign Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Assign an internal support request to another team member. The previous and the new assignee are\nnotified.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReassignInternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/assign_to_me": {"patch": {"operationId": "assign_to_me_internal_support_request", "summary": "Assign To Me Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Claim unassigned requests matching your expertise for immediate handling.\nUseful for queue management and proactive support. Automatically updates\nassignment and notifies requester. Consider current workload before\nclaiming additional requests.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/reject_solution": {"patch": {"operationId": "reject_solution_internal_support_request", "summary": "Reject Solution Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Indicate proposed solution doesn't resolve the issue adequately.\nReturns request to active processing for alternative solutions.\nProvide feedback on why solution failed to guide next attempts.\nMaintains quality control in support delivery.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/accept_solution": {"patch": {"operationId": "accept_solution_internal_support_request", "summary": "Accept Solution Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Confirm proposed solution successfully resolves your issue.\nTriggers request closure and captures resolution for knowledge base.\nHelps build solution library for common problems. Acceptance metrics\ntrack support quality and effectiveness.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/close": {"patch": {"operationId": "close_internal_support_request", "summary": "Close Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Close an internal support request with a resolution. The requester and the assignee are\nnotified. The requester can reopen it within a day.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CloseInternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/edit": {"patch": {"operationId": "edit_internal_support_request", "summary": "Edit Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit the title, description, type or severity of an internal support request. The request stays\nin its queue. A closed request can no longer be edited.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditInternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/edit_own": {"patch": {"operationId": "edit_own_internal_support_request", "summary": "Edit Own Internal Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit a support request you opened, as long as it is not closed.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditInternalSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request_timeline/{support_request_id}": {"get": {"operationId": "internal_support_request_timeline", "summary": "Internal Support Request Timeline", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputInternalSupportRequestTimeline"}}}}}, "description": "View chronological history of all request activities and state changes.\nShows status transitions, assignments, comments, and resolution attempts.\nEssential for understanding request progression and identifying delays.\nHelps agents avoid duplicate efforts and maintain context.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request_timeline_own/{support_request_id}": {"get": {"operationId": "internal_support_request_timeline_own", "summary": "Internal Support Request Timeline Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputInternalSupportRequestTimeline"}}}}}, "description": "Track progress timeline for your submitted requests transparently.\nSee when actions were taken and by whom for accountability.\nUnderstand current status and next expected steps. Useful for\nfollowing up on delayed responses.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request_timeline/{support_request_id}": {"get": {"operationId": "external_support_request_timeline", "summary": "External Support Request Timeline", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputExternalSupportRequestTimeline"}}}}}, "description": "View chronological history of all external request activities from customers.\nShows status transitions, assignments, comments visible to customers, and resolution attempts.\nEssential for understanding customer request progression and identifying delays.\nHelps agents maintain context and provide informed responses.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request_timeline_own/{support_request_id}": {"get": {"operationId": "external_support_request_timeline_own", "summary": "External Support Request Timeline Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputExternalSupportRequestTimeline"}}}}}, "description": "Track progress timeline for customer portal submitted requests transparently.\nSee when actions were taken and by whom for accountability. Only shows\ncomments marked as visible to requester. Useful for customers following\nup on delayed responses and understanding current status.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_internal_support_request_comment": {"post": {"operationId": "add_internal_support_request_comment", "summary": "Add Internal Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a comment to an internal support request. The requester and the assignee are notified. You\ncan reply to a comment, but not to a reply.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddInternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_internal_support_request_comment_own": {"post": {"operationId": "add_internal_support_request_comment_own", "summary": "Add Internal Support Request Comment Own", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a comment to a support request you opened. The assignee is notified.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddInternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_comment/{comment_id}": {"patch": {"operationId": "edit_own_internal_comment", "summary": "Edit Own Internal Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit a comment you wrote. It is marked as edited.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditInternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_own_internal_comment", "summary": "Delete Own Internal Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a comment you wrote. Its replies are deleted with it, permanently.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_comment/{comment_id}": {"patch": {"operationId": "edit_own_external_comment", "summary": "Edit Own External Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit a comment you wrote. It is marked as edited.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditExternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_own_external_comment", "summary": "Delete Own External Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a comment you wrote. Its replies are deleted with it, permanently.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/comment/{comment_id}": {"patch": {"operationId": "edit_internal_support_request_comment", "summary": "Edit Internal Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit any comment on an internal support request, for moderation. The comment is marked as\nedited.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditInternalSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_internal_support_request_comment", "summary": "Delete Internal Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete any comment on an internal support request, for moderation. Its replies are deleted with\nit, permanently.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/queue_rules": {"get": {"operationId": "list_queue_rules", "summary": "List Queue Rules", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputQueueRules"}}}}}, "description": "View automated routing logic determining queue assignments.\nRules based on type, severity, customer tier, or custom attributes.\nUnderstanding rules helps optimize request distribution and identify\nrouting conflicts. Essential for queue management strategy.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_queue_rule": {"post": {"operationId": "add_queue_rule", "summary": "Add Queue Rule", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Send new support requests to a queue by their type, their severity, or both. The rule with the\nlowest priority number wins, and among equals the more specific one. A request no rule matches\ngoes to the first queue.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddQueueRule"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/queue_rule/{rule_id}": {"patch": {"operationId": "edit_queue_rule", "summary": "Edit Queue Rule", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rule_id", "schema": {"title": "Rule Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Refine routing logic when team responsibilities or priorities change.\nAdjust conditions, target queues, or rule priority. Changes affect\nnew requests immediately - existing requests stay in current queues.\nMonitor routing patterns after changes to ensure effectiveness.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditQueueRule"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_queue_rule", "summary": "Delete Queue Rule", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rule_id", "schema": {"title": "Rule Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove routing automation when no longer needed or causing issues.\nEnsure alternative routing exists for affected request types.\nDeletion may cause requests to fall through to default queues.\nReview remaining rules to prevent routing gaps.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request/{support_request_id}/transfer_queue": {"patch": {"operationId": "transfer_internal_support_request_queue", "summary": "Transfer Internal Support Request Queue", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move an internal support request to another queue. It loses its assignee, and the new queue may\nassign it automatically.", "tags": ["support"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/TransferSupportRequestQueue"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/support_center_queues": {"get": {"operationId": "support_center_queues", "summary": "Support Center Queues", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSupportRequestQueues"}}}}}, "description": "Dashboard view of all queues with performance metrics and workload.\nShows open tickets, average resolution time, and team capacity.\nEssential for support center management and resource allocation.\nIdentifies bottlenecks and teams needing assistance.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_requests": {"get": {"operationId": "list_internal_support_requests", "summary": "List Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "customer_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "required": false}, {"in": "query", "name": "project_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "required": false}, {"in": "query", "name": "resource_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Id"}, "required": false}, {"in": "query", "name": "queue_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Queue Id"}, "required": false}, {"in": "query", "name": "type_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Type Id"}, "required": false}, {"in": "query", "name": "severity_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Severity Id"}, "required": false}, {"in": "query", "name": "status_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Status Id"}, "required": false}, {"in": "query", "name": "assignee_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Assignee Id"}, "required": false}, {"in": "query", "name": "requester_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Requester Id"}, "required": false}, {"in": "query", "name": "my_requests", "schema": {"default": false, "title": "My Requests", "type": "boolean"}, "required": false}, {"in": "query", "name": "assigned_to_me", "schema": {"default": false, "title": "Assigned To Me", "type": "boolean"}, "required": false}, {"in": "query", "name": "lifecycle_filter", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lifecycle Filter"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 100, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Search and filter internal requests with multiple criteria combinations.\nBuild custom views for different support roles and responsibilities.\nPowerful filtering enables workload analysis and trend identification.\nUse pagination for large result sets to maintain performance.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal/{proposal_id}/internal_support_requests": {"get": {"operationId": "list_proposal_internal_support_requests", "summary": "List Proposal Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Track support requests blocking or supporting specific deals.\nIdentifies proposal dependencies and resolution requirements.\nCritical for understanding deal risks and timeline impacts.\nHelps sales teams address concerns proactively.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource/{resource_id}/internal_support_requests": {"get": {"operationId": "list_resource_internal_support_requests", "summary": "List Resource Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View issues affecting specific resources for maintenance planning.\nTrack equipment problems, personnel issues, or facility concerns.\nEssential for resource availability management and preventive\nmaintenance scheduling. Identifies problematic resources.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_requests/assigned_to_me": {"get": {"operationId": "list_assigned_to_me_internal_support_requests", "summary": "List Assigned To Me Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Personal work queue showing all requests requiring your attention.\nConsolidates assignments across all queues for unified view.\nPrioritize based on severity and age. Essential for daily\nsupport workflow management.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/queue/{queue_id}/internal_support_requests": {"get": {"operationId": "list_queue_internal_support_requests", "summary": "List Queue Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "queue_id", "schema": {"title": "Queue Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Monitor specific queue workload for capacity and performance management.\nShows all requests awaiting processing by queue team. Essential for\nqueue managers to distribute work and maintain SLAs. Identifies\nqueue-specific bottlenecks.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/queue_internal_support_requests/{queue_id}": {"get": {"operationId": "queue_internal_support_requests", "summary": "Queue Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "queue_id", "schema": {"title": "Queue Id", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by title, description, or reference ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search by title, description, or reference ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assigned team member", "q": "assignee__external_id", "title": "Assignee"}, "required": false, "description": "Filter by assigned team member"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "has_assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assignment status: 'assigned' or 'unassigned'", "title": "Has Assignee"}, "required": false, "description": "Filter by assignment status: 'assigned' or 'unassigned'"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View active internal requests requiring attention in specific queue.\nFocus on open items needing resolution. Essential for queue teams\nto manage daily workload. Helps identify aging requests requiring\nescalation or additional resources.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/queue_closed_internal_support_requests/{queue_id}": {"get": {"operationId": "queue_closed_internal_support_requests", "summary": "Queue Closed Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "queue_id", "schema": {"title": "Queue Id", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by title, description, or reference ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search by title, description, or reference ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assigned team member", "q": "assignee__external_id", "title": "Assignee"}, "required": false, "description": "Filter by assigned team member"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "has_assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assignment status: 'assigned' or 'unassigned'", "title": "Has Assignee"}, "required": false, "description": "Filter by assignment status: 'assigned' or 'unassigned'"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Review resolved requests for quality assurance and knowledge building.\nAnalyze resolution patterns and success rates. Useful for training\nnew team members and identifying process improvements. Historical\ndata helps predict future queue performance.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/queue_external_support_requests/{queue_id}": {"get": {"operationId": "queue_external_support_requests", "summary": "Queue External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "queue_id", "schema": {"title": "Queue Id", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by title, description, or reference ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search by title, description, or reference ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assigned team member", "q": "assignee__external_id", "title": "Assignee"}, "required": false, "description": "Filter by assigned team member"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "has_assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assignment status: 'assigned' or 'unassigned'", "title": "Has Assignee"}, "required": false, "description": "Filter by assignment status: 'assigned' or 'unassigned'"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Monitor customer tickets in specific support queue for SLA compliance.\nExternal requests require timely response to maintain satisfaction.\nTrack aging tickets and prioritize based on customer impact.\nCritical for maintaining service level commitments.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/queue_closed_external_support_requests/{queue_id}": {"get": {"operationId": "queue_closed_external_support_requests", "summary": "Queue Closed External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "queue_id", "schema": {"title": "Queue Id", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by title, description, or reference ID", "q": ["title__icontains", "description__icontains", "public_reference__icontains"], "title": "Search"}, "required": false, "description": "Search by title, description, or reference ID"}, {"in": "query", "name": "type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by request type", "q": "request_type__external_id", "title": "Type"}, "required": false, "description": "Filter by request type"}, {"in": "query", "name": "severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by severity", "q": "request_severity__external_id", "title": "Severity"}, "required": false, "description": "Filter by severity"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "request_status__external_id", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "queue", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by queue", "q": "request_queue__external_id", "title": "Queue"}, "required": false, "description": "Filter by queue"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by project", "q": "project__external_id", "title": "Project"}, "required": false, "description": "Filter by project"}, {"in": "query", "name": "resource", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by resource", "q": "resource__external_id", "title": "Resource"}, "required": false, "description": "Filter by resource"}, {"in": "query", "name": "assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assigned team member", "q": "assignee__external_id", "title": "Assignee"}, "required": false, "description": "Filter by assigned team member"}, {"in": "query", "name": "requester", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by requester", "q": "requester__external_id", "title": "Requester"}, "required": false, "description": "Filter by requester"}, {"in": "query", "name": "has_assignee", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by assignment status: 'assigned' or 'unassigned'", "title": "Has Assignee"}, "required": false, "description": "Filter by assignment status: 'assigned' or 'unassigned'"}, {"in": "query", "name": "created_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (from), e.g. '02 Jan, 2025'", "title": "Created From"}, "required": false, "description": "Filter by creation date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "created_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by creation date (to), e.g. '02 Jan, 2025'", "title": "Created To"}, "required": false, "description": "Filter by creation date (to), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (from), e.g. '02 Jan, 2025'", "title": "Updated From"}, "required": false, "description": "Filter by last update date (from), e.g. '02 Jan, 2025'"}, {"in": "query", "name": "updated_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by last update date (to), e.g. '02 Jan, 2025'", "title": "Updated To"}, "required": false, "description": "Filter by last update date (to), e.g. '02 Jan, 2025'"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Analyze resolved customer issues for service improvement opportunities.\nReview customer satisfaction with resolutions. Identify recurring\nproblems requiring product fixes or documentation. Build knowledge\nbase from successful resolutions.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_requests/open": {"get": {"operationId": "list_open_internal_support_requests", "summary": "List Open Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Global view of all active internal support requests across queues.\nEssential for management oversight and resource allocation decisions.\nIdentifies system-wide support trends and bottlenecks. Helps balance\nworkload across teams and prioritize critical issues.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_internal_support_requests/{work_item_id}": {"get": {"operationId": "work_item_internal_support_requests", "summary": "Work Item Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View all open internal support requests associated with a specific work item.\nEssential for tracking issues, blockers, and questions related to work item execution.\nShows requests across all queues to provide complete visibility of work item support needs.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_external_support_requests/{work_item_id}": {"get": {"operationId": "work_item_external_support_requests", "summary": "Work Item External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View all open external support requests associated with a specific work item.\nShows customer-facing issues and requests related to work item deliverables.\nCritical for understanding external dependencies and customer impact of work items.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_closed_internal_support_requests/{work_item_id}": {"get": {"operationId": "work_item_closed_internal_support_requests", "summary": "Work Item Closed Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access resolved internal support request history for a work item.\nReview past issues and solutions for context and patterns. Useful for\nunderstanding recurring problems and evaluating solution effectiveness.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_closed_external_support_requests/{work_item_id}": {"get": {"operationId": "work_item_closed_external_support_requests", "summary": "Work Item Closed External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access resolved external support request history for a work item.\nReview customer issues that were addressed during work item execution.\nHelps identify quality patterns and customer satisfaction trends.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_internal_support_requests/{resource_id}": {"get": {"operationId": "resource_internal_support_requests", "summary": "Resource Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View internal support requests related to a specific resource.\nTrack issues affecting resource availability or functionality.\nEssential for resource management and maintenance planning.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_external_support_requests/{resource_id}": {"get": {"operationId": "resource_external_support_requests", "summary": "Resource External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View external customer support requests related to a resource.\nMonitor customer-reported issues affecting resource usage.\nCritical for resource quality and customer satisfaction tracking.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_closed_internal_support_requests/{resource_id}": {"get": {"operationId": "resource_closed_internal_support_requests", "summary": "Resource Closed Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access resolved internal support request history for a resource.\nReview past issues and solutions for resource maintenance patterns.\nUseful for identifying recurring problems and preventive measures.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/resource_closed_external_support_requests/{resource_id}": {"get": {"operationId": "resource_closed_external_support_requests", "summary": "Resource Closed External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "resource_id", "schema": {"title": "Resource Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access resolved external support request history for a resource.\nReview customer issues that were addressed for this resource.\nHelps identify quality patterns and customer satisfaction trends.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_internal_support_requests/{proposal_id}": {"get": {"operationId": "proposal_internal_support_requests", "summary": "Proposal Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View internal support requests related to a specific proposal.\nTrack issues affecting proposal progress or implementation.\nEssential for managing proposal-related challenges.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_external_support_requests/{proposal_id}": {"get": {"operationId": "proposal_external_support_requests", "summary": "Proposal External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View external customer support requests related to a proposal.\nMonitor customer concerns about proposed solutions.\nCritical for understanding client needs and expectations.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_closed_internal_support_requests/{proposal_id}": {"get": {"operationId": "proposal_closed_internal_support_requests", "summary": "Proposal Closed Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access resolved internal support request history for a proposal.\nReview past challenges and solutions during proposal development.\nUseful for improving future proposal processes.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_closed_external_support_requests/{proposal_id}": {"get": {"operationId": "proposal_closed_external_support_requests", "summary": "Proposal Closed External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "Access resolved external support request history for a proposal.\nReview customer issues that were addressed during the proposal.\nHelps identify patterns in customer concerns and resolutions.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_internal_support_requests/{org_id}": {"get": {"operationId": "org_internal_support_requests", "summary": "Org Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View all open internal support requests related to a specific customer organization.\nUnderstand customer pain points and recurring issues. Essential for\naccount management and customer success.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_external_support_requests/{org_id}": {"get": {"operationId": "org_external_support_requests", "summary": "Org External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View all open external support requests from a specific customer organization.\nTrack customer-reported issues and feature requests.\nEssential for customer satisfaction and retention.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_closed_internal_support_requests/{org_id}": {"get": {"operationId": "org_closed_internal_support_requests", "summary": "Org Closed Internal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View closed internal support requests for a customer organization.\nReview resolved internal issues and their solutions.\nHelps identify patterns and prevent recurring problems.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_closed_external_support_requests/{org_id}": {"get": {"operationId": "org_closed_external_support_requests", "summary": "Org Closed External Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMySupportRequests"}}}}}, "description": "View closed external support requests from a customer organization.\nReview customer issues that were addressed.\nHelps identify patterns in customer concerns and resolutions.", "tags": ["support"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_definitions": {"get": {"operationId": "list_process_definitions", "summary": "List Process Definitions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProcesses"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_definition": {"post": {"operationId": "add_process_definition", "summary": "Add Process Definition", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddProcess"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_definition/{process_id}": {"patch": {"operationId": "edit_process_definition", "summary": "Edit Process Definition", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "process_id", "schema": {"title": "Process Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditProcess"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_process_definition", "summary": "Delete Process Definition", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "process_id", "schema": {"title": "Process Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "get": {"operationId": "get_process_definition", "summary": "Get Process Definition", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "process_id", "schema": {"title": "Process Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProcessStages"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_stages/{process_id}": {"get": {"operationId": "list_process_stages", "summary": "List Process Stages", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "process_id", "schema": {"title": "Process Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProcessStages"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_stage": {"post": {"operationId": "add_process_stage", "summary": "Add Process Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddProcessStage"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_stage/{stage_id}": {"patch": {"operationId": "edit_process_stage", "summary": "Edit Process Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditProcessStage"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_process_stage", "summary": "Delete Process Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_link": {"post": {"operationId": "add_process_link", "summary": "Add Process Link", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddProcessLink"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_link/{link_id}": {"delete": {"operationId": "delete_process_link", "summary": "Delete Process Link", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_participations/{process_id}": {"get": {"operationId": "list_process_participations", "summary": "List Process Participations", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "process_id", "schema": {"title": "Process Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProcessParticipations"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_participation": {"post": {"operationId": "add_process_participation", "summary": "Add Process Participation", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddProcessParticipation"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_participation/{participation_id}": {"delete": {"operationId": "delete_process_participation", "summary": "Delete Process Participation", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "participation_id", "schema": {"title": "Participation Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/user_processes": {"get": {"operationId": "list_user_processes", "summary": "List User Processes", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProcessSummaries"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_stage_tasks/{process_id}": {"get": {"operationId": "process_stage_tasks", "summary": "Process Stage Tasks", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "process_id", "schema": {"title": "Process Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProcessStagesWithTasks"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_tasks": {"get": {"operationId": "my_tasks", "summary": "My Tasks", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyTasks"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_approvals": {"get": {"operationId": "my_approvals", "summary": "My Approvals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOperationalItems"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tasks": {"get": {"operationId": "list_tasks", "summary": "List Tasks", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by name or description", "q": ["name__icontains", "description__icontains"], "title": "Search"}, "required": false, "description": "Search by name or description"}, {"in": "query", "name": "process", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by process", "q": "process__external_id", "title": "Process"}, "required": false, "description": "Filter by process"}, {"in": "query", "name": "current_stage", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by current stage", "q": "current_stage__external_id", "title": "Current Stage"}, "required": false, "description": "Filter by current stage"}, {"in": "query", "name": "owner", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by owner", "q": "owner__external_id", "title": "Owner"}, "required": false, "description": "Filter by owner"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization", "q": "customer__external_id", "title": "Customer"}, "required": false, "description": "Filter by customer organization"}, {"in": "query", "name": "priority", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by priority", "q": "priority__iexact", "title": "Priority"}, "required": false, "description": "Filter by priority"}, {"in": "query", "name": "due_from", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Due on or after this date, e.g. '02 Jan, 2025'", "title": "Due From"}, "required": false, "description": "Due on or after this date, e.g. '02 Jan, 2025'"}, {"in": "query", "name": "due_to", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Due on or before this date, e.g. '02 Jan, 2025'", "title": "Due To"}, "required": false, "description": "Due on or before this date, e.g. '02 Jan, 2025'"}, {"in": "query", "name": "is_finished", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Only finished tasks", "q": "is_finished", "title": "Is Finished"}, "required": false, "description": "Only finished tasks"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOperationalItems"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/list_asset_operational_items/{asset_id}": {"get": {"operationId": "list_asset_operational_items", "summary": "List Asset Operational Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOperationalItems"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/task/{item_id}": {"get": {"operationId": "get_task", "summary": "Get Task", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOperationalItem"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "patch": {"operationId": "edit_task", "summary": "Edit Task", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditOperationalItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_task", "summary": "Delete Task", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/task": {"post": {"operationId": "add_task", "summary": "Add Task", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddOperationalItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/move_task/{item_id}": {"post": {"operationId": "move_task", "summary": "Move Task", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MoveOperationalItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/approve_task/{item_id}": {"post": {"operationId": "approve_task", "summary": "Approve Task", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApproveOperationalItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reject_task/{item_id}": {"post": {"operationId": "reject_task", "summary": "Reject Task", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RejectOperationalItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reassign_task/{item_id}": {"patch": {"operationId": "reassign_task", "summary": "Reassign Task", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["operations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReassignOperationalItem"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/task_history/{item_id}": {"get": {"operationId": "task_history", "summary": "Task History", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOperationalItemHistory"}}}}}, "tags": ["operations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/timers": {"get": {"operationId": "tenant_timers", "summary": "Tenant Timers", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTimers"}}}}}, "tags": ["timers"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/timer": {"post": {"operationId": "add_timer", "summary": "Add Timer", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["timers"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddTimer"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/timer/{timer_id}": {"patch": {"operationId": "edit_timer", "summary": "Edit Timer", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "timer_id", "schema": {"title": "Timer Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["timers"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditTimer"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_timer", "summary": "Delete Timer", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "timer_id", "schema": {"title": "Timer Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["timers"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/open_tickets": {"get": {"operationId": "kpi_open_tickets", "summary": "Kpi Open Tickets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "older_than_hours", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Older Than Hours"}, "required": false}, {"in": "query", "name": "severity_name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Severity Name"}, "required": false}, {"in": "query", "name": "assignee_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Assignee Id"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIOpenTickets"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/open_external_tickets": {"get": {"operationId": "kpi_open_external_tickets", "summary": "Kpi Open External Tickets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "older_than_hours", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Older Than Hours"}, "required": false}, {"in": "query", "name": "severity_name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Severity Name"}, "required": false}, {"in": "query", "name": "customer_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "required": false}, {"in": "query", "name": "queue_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Queue Id"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIOpenExternalTickets"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/queue_health": {"get": {"operationId": "kpi_queue_health", "summary": "Kpi Queue Health", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "min_ticket_count", "schema": {"default": 1, "title": "Min Ticket Count", "type": "integer"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIQueueHealth"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/overdue_payments": {"get": {"operationId": "kpi_overdue_payments", "summary": "Kpi Overdue Payments", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_overdue_gte", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Overdue Gte"}, "required": false}, {"in": "query", "name": "project_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIOverduePayments"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/lead_pipeline_health": {"get": {"operationId": "kpi_lead_pipeline_health", "summary": "Kpi Lead Pipeline Health", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "stale_days", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Stale Days"}, "required": false}, {"in": "query", "name": "conversion_window_days", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Conversion Window Days"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPILeadPipelineHealth"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/upcoming_payments": {"get": {"operationId": "kpi_upcoming_payments", "summary": "Kpi Upcoming Payments", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "due_within_days", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Due Within Days"}, "required": false}, {"in": "query", "name": "project_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIUpcomingPayments"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/stale_proposals": {"get": {"operationId": "kpi_stale_proposals", "summary": "Kpi Stale Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_since_update_gte", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Since Update Gte"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIStaleProposals"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/expiring_proposals": {"get": {"operationId": "kpi_expiring_proposals", "summary": "Kpi Expiring Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_until_expiry_lte", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Until Expiry Lte"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIExpiringProposals"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/proposals_without_activity": {"get": {"operationId": "kpi_proposals_without_activity", "summary": "Kpi Proposals Without Activity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "no_activity_days", "schema": {"default": 14, "title": "No Activity Days", "type": "integer"}, "required": false}, {"in": "query", "name": "min_value", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Min Value"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIProposalsWithoutActivity"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/won_without_project_start": {"get": {"operationId": "kpi_won_without_project_start", "summary": "Kpi Won Without Project Start", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_since_won_gte", "schema": {"default": 7, "title": "Days Since Won Gte", "type": "integer"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIWonWithoutProjectStart"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/blocked_deliverables": {"get": {"operationId": "kpi_blocked_deliverables", "summary": "Kpi Blocked Deliverables", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "stuck_days_gte", "schema": {"default": 3, "title": "Stuck Days Gte", "type": "integer"}, "required": false}, {"in": "query", "name": "project_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIBlockedDeliverables"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/work_items_due": {"get": {"operationId": "kpi_work_items_due", "summary": "Kpi Work Items Due", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "due_within_days", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Due Within Days"}, "required": false}, {"in": "query", "name": "project_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIWorkItemsDue"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/projects_at_risk": {"get": {"operationId": "kpi_projects_at_risk", "summary": "Kpi Projects At Risk", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_to_deadline_lte", "schema": {"default": 30, "title": "Days To Deadline Lte", "type": "integer"}, "required": false}, {"in": "query", "name": "max_completion_pct", "schema": {"default": 80, "title": "Max Completion Pct", "type": "integer"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIProjectsAtRisk"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/stale_operational_items": {"get": {"operationId": "kpi_stale_operational_items", "summary": "Kpi Stale Operational Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_since_update_gte", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Since Update Gte"}, "required": false}, {"in": "query", "name": "process_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Process Id"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIStaleOperationalItems"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/overdue_operational_items": {"get": {"operationId": "kpi_overdue_operational_items", "summary": "Kpi Overdue Operational Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_overdue_gte", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Overdue Gte"}, "required": false}, {"in": "query", "name": "process_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Process Id"}, "required": false}, {"in": "query", "name": "priority", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Priority"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIOverdueOperationalItems"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/process_bottlenecks": {"get": {"operationId": "kpi_process_bottlenecks", "summary": "Kpi Process Bottlenecks", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "process_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Process Id"}, "required": false}, {"in": "query", "name": "threshold_count", "schema": {"default": 5, "title": "Threshold Count", "type": "integer"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIProcessBottlenecks"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/team_workload": {"get": {"operationId": "kpi_team_workload", "summary": "Kpi Team Workload", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "overloaded_threshold", "schema": {"default": 10, "title": "Overloaded Threshold", "type": "integer"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPITeamWorkload"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/unassigned_items": {"get": {"operationId": "kpi_unassigned_items", "summary": "Kpi Unassigned Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "older_than_hours", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Older Than Hours"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIUnassignedItems"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/revenue_at_risk": {"get": {"operationId": "kpi_revenue_at_risk", "summary": "Kpi Revenue At Risk", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_until_expiry_lte", "schema": {"default": 30, "title": "Days Until Expiry Lte", "type": "integer"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIRevenueAtRisk"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/expiring_api_keys": {"get": {"operationId": "kpi_expiring_api_keys", "summary": "Kpi Expiring Api Keys", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_until_expiry_lte", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Until Expiry Lte"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIExpiringApiKeys"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/inactive_partnerships": {"get": {"operationId": "kpi_inactive_partnerships", "summary": "Kpi Inactive Partnerships", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_inactive_gte", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Inactive Gte"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIInactivePartnerships"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/kpi/expiring_warranties": {"get": {"operationId": "kpi_expiring_warranties", "summary": "Kpi Expiring Warranties", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "days_until_expiry_lte", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Until Expiry Lte"}, "required": false}, {"in": "query", "name": "customer_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "required": false}, {"in": "query", "name": "include_items", "schema": {"default": false, "title": "Include Items", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputKPIExpiringWarranties"}}}}}, "tags": ["kpis"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_comments/{work_item_id}/{page_number}": {"get": {"operationId": "list_work_item_comments", "summary": "List Work Item Comments", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "page_number", "schema": {"title": "Page Number", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCommentsFeed"}}}}}, "description": "View the discussion thread for a project work item. Paginated results show\ncomments with nested replies, maintaining conversation context for decisions,\nprogress notes, and implementation details.", "tags": ["comments"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_comment": {"post": {"operationId": "add_work_item_comment", "summary": "Add Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a comment to a project work item. Track decisions, progress notes,\nand implementation details. Reply to existing comments for threaded\ndiscussions. Comments become part of the permanent work item record.", "tags": ["comments"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWorkItemComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_work_item_comment/{comment_id}": {"patch": {"operationId": "edit_work_item_comment", "summary": "Edit Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit any work item comment (admin/manager moderation).", "tags": ["comments"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_own_work_item_comment/{comment_id}": {"patch": {"operationId": "edit_own_work_item_comment", "summary": "Edit Own Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit your own work item comment.", "tags": ["comments"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_work_item_comment/{comment_id}": {"delete": {"operationId": "delete_work_item_comment", "summary": "Delete Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete any work item comment (admin/manager moderation).", "tags": ["comments"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_own_work_item_comment/{comment_id}": {"delete": {"operationId": "delete_own_work_item_comment", "summary": "Delete Own Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete your own work item comment.", "tags": ["comments"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/operational_work_item_comments/{item_id}/{page_number}": {"get": {"operationId": "list_operational_work_item_comments", "summary": "List Operational Work Item Comments", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "page_number", "schema": {"title": "Page Number", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCommentsFeed"}}}}}, "description": "View the discussion thread for an operational work item. Paginated results\nshow comments with nested replies, tracking decisions and progress as\nitems move through process stages.", "tags": ["comments"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/operational_work_item_comment": {"post": {"operationId": "add_operational_work_item_comment", "summary": "Add Operational Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a comment to an operational work item. Track decisions, note issues,\nand document progress at each stage. Reply to existing comments for\nthreaded discussions.", "tags": ["comments"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddOperationalWorkItemComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_operational_work_item_comment/{comment_id}": {"patch": {"operationId": "edit_operational_work_item_comment", "summary": "Edit Operational Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit any operational work item comment (admin/manager moderation).", "tags": ["comments"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_own_operational_work_item_comment/{comment_id}": {"patch": {"operationId": "edit_own_operational_work_item_comment", "summary": "Edit Own Operational Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit your own operational work item comment.", "tags": ["comments"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_operational_work_item_comment/{comment_id}": {"delete": {"operationId": "delete_operational_work_item_comment", "summary": "Delete Operational Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete any operational work item comment (admin/manager moderation).", "tags": ["comments"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_own_operational_work_item_comment/{comment_id}": {"delete": {"operationId": "delete_own_operational_work_item_comment", "summary": "Delete Own Operational Work Item Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete your own operational work item comment.", "tags": ["comments"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/list_asset_categories": {"get": {"operationId": "list_asset_categories", "summary": "List Asset Categories", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputAssetCategories"}}}}}, "description": "View all asset categories defined in your workspace.\nCategories standardize the types of customer assets for consistent tracking.\nEssential for definitions management and asset type organization.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_asset_category": {"post": {"operationId": "add_asset_category", "summary": "Add Asset Category", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a new asset category to expand your asset classification system.\nCategory names must be unique within your workspace.\nExamples: \"HVAC Unit\", \"Web Server\", \"Website\", \"POS System\".", "tags": ["assets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddAssetCategory"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_asset_category/{category_id}": {"patch": {"operationId": "edit_asset_category", "summary": "Edit Asset Category", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "category_id", "schema": {"title": "Category Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update an existing asset category's properties.\nChanges apply to the category definition; existing assets retain their assignment.\nConsider impact on operational workflows before renaming.", "tags": ["assets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditAssetCategory"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_asset_category/{category_id}": {"delete": {"operationId": "delete_asset_category", "summary": "Delete Asset Category", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "category_id", "schema": {"title": "Category Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove an asset category from your workspace.\nCannot delete categories that are assigned to existing customer assets.\nConsider deactivating instead of deleting to preserve historical data.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/list_customer_locations/{org_id}": {"get": {"operationId": "list_customer_locations", "summary": "List Customer Locations", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerLocations"}}}}}, "description": "View all location assignments for a specific customer organization.\nShows where this customer has a presence in your location taxonomy,\nwith their customer-facing names and the mapped location paths.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_customer_location": {"post": {"operationId": "add_customer_location", "summary": "Add Customer Location", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Assign a customer to a location in your taxonomy.\nEach customer can have one assignment per location node, with a\ncustomer-facing name like \"Mall X Shop\" or \"Our Cloud Setup\".", "tags": ["assets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddCustomerLocation"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_customer_location/{customer_location_id}": {"patch": {"operationId": "edit_customer_location", "summary": "Edit Customer Location", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "customer_location_id", "schema": {"title": "Customer Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update a customer location assignment's properties.\nYou can change the name, description, mapped location, or active status.\nThe customer organization cannot be changed after creation.", "tags": ["assets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditCustomerLocation"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/set_customer_location_coordinates/{customer_location_id}": {"post": {"operationId": "set_customer_location_coordinates", "summary": "Set Customer Location Coordinates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "customer_location_id", "schema": {"title": "Customer Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCoordinatesConflict"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Set a customer location's GPS coordinates from a device fix captured on\nsite. Writes above the workspace accuracy floor are rejected, and an\nexisting pin is only moved after an explicit confirmation.", "tags": ["assets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetEntityCoordinates"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_customer_location/{customer_location_id}": {"delete": {"operationId": "delete_customer_location", "summary": "Delete Customer Location", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "customer_location_id", "schema": {"title": "Customer Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a customer location assignment.\nCannot delete if customer assets are registered at this location.\nConsider deactivating instead to preserve historical data.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/location_customer_locations/{location_id}": {"get": {"operationId": "location_customer_locations", "summary": "Location Customer Locations", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "location_id", "schema": {"title": "Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerLocations"}}}}}, "description": "View all customer organizations that have a presence at a specific location.\nProvides the inverse view: given a location in your taxonomy, see which\ncustomers operate there and under what names.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/list_customer_location_assets/{customer_location_id}": {"get": {"operationId": "list_customer_location_assets", "summary": "List Customer Location Assets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "customer_location_id", "schema": {"title": "Customer Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerAssets"}}}}}, "description": "View root-level customer assets at a specific customer location.\nShows assets registered at this location, with links to their\nentity pages for full details and subasset hierarchy.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tenant_customer_assets": {"get": {"operationId": "tenant_customer_assets", "summary": "Tenant Customer Assets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by asset name, serial number / URI, or internal code", "q": ["name__icontains", "serial_number_or_uri__icontains", "internal_code__icontains"], "title": "Search"}, "required": false, "description": "Search by asset name, serial number / URI, or internal code"}, {"in": "query", "name": "name", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by asset name", "q": "name__icontains", "title": "Name"}, "required": false, "description": "Filter by asset name"}, {"in": "query", "name": "serial_number_or_uri", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by serial number or URI", "q": "serial_number_or_uri__icontains", "title": "Serial Number Or Uri"}, "required": false, "description": "Filter by serial number or URI"}, {"in": "query", "name": "customer", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer organization (external id)", "title": "Customer"}, "required": false, "description": "Filter by customer organization (external id)"}, {"in": "query", "name": "category", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by asset category (external id)", "title": "Category"}, "required": false, "description": "Filter by asset category (external id)"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by lifecycle status (planned, active, maintenance, retired)", "q": "status__exact", "title": "Status"}, "required": false, "description": "Filter by lifecycle status (planned, active, maintenance, retired)"}, {"in": "query", "name": "placement", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by placement: 'placed' or 'unplaced'", "title": "Placement"}, "required": false, "description": "Filter by placement: 'placed' or 'unplaced'"}, {"in": "query", "name": "root_only", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Return only root-level assets (depth=0) instead of every depth", "title": "Root Only"}, "required": false, "description": "Return only root-level assets (depth=0) instead of every depth"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerAssets"}}}}}, "description": "List every customer asset in your workspace, across all customers and locations.\nSearch by name, serial number or internal code, and narrow by customer, category\nor lifecycle status. Set placement to 'unplaced' to find equipment that is not yet\nassigned to any customer location, or 'placed' for the rest.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/list_customer_assets/{org_id}": {"get": {"operationId": "list_customer_assets", "summary": "List Customer Assets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerAssets"}}}}}, "description": "View all customer assets for a specific customer organization.\nAssets are grouped by customer location and shown in hierarchy order,\nwith category, status, and installation details for each asset.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_customer_asset": {"post": {"operationId": "add_customer_asset", "summary": "Add Customer Asset", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Register a new asset for a customer organization.\nAssets can be placed under a parent to form hierarchical trees\n(e.g. 'HVAC System > Compressor'). Assign a category, optional\ncustomer location, and link to the originating project and product.", "tags": ["assets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddCustomerAsset"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_customer_asset/{asset_id}": {"patch": {"operationId": "edit_customer_asset", "summary": "Edit Customer Asset", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update an existing customer asset's properties or move it in the hierarchy.\nYou can change the category, location, status, warranty details, and\nreparent the asset under a different parent within the same customer.\nThe customer organization cannot be changed after creation.", "tags": ["assets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditCustomerAsset"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_customer_asset/{asset_id}": {"delete": {"operationId": "delete_customer_asset", "summary": "Delete Customer Asset", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}, {"in": "query", "name": "delete_descendants", "schema": {"default": false, "title": "Delete Descendants", "type": "boolean"}, "required": false}, {"in": "query", "name": "reparent_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reparent Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a customer asset with options for handling children.\nChildren can be deleted or reparented to another asset belonging to the same customer.\nIf the asset has no children, it is deleted directly.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/set_customer_asset_coordinates/{asset_id}": {"post": {"operationId": "set_customer_asset_coordinates", "summary": "Set Customer Asset Coordinates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCoordinatesConflict"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Set a customer asset's GPS coordinates from a device fix captured next to\nthe equipment. Writes above the workspace accuracy floor are rejected, and\nan existing pin is only moved after an explicit confirmation.", "tags": ["assets"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetEntityCoordinates"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/list_customer_asset_children/{asset_id}": {"get": {"operationId": "list_customer_asset_children", "summary": "List Customer Asset Children", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerAssets"}}}}}, "description": "View all descendant assets of a specific customer asset.\nReturns a DFS-flattened list of child assets in hierarchy order,\nused in the subassets tab of the customer asset entity page.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/customer_asset/{asset_id}": {"get": {"operationId": "get_customer_asset", "summary": "Get Customer Asset", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerAsset"}}}}}, "description": "View a single customer asset by id.\nReturns the same fields as the asset lists, including coordinates,\nfor detail consumers such as the mobile app's QR scan flow.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/list_customer_asset_tickets/{asset_id}": {"get": {"operationId": "list_customer_asset_tickets", "summary": "List Customer Asset Tickets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerAssetTickets"}}}}}, "description": "View all support tickets linked to a specific customer asset.\nShows both ISR and ESR where this asset is the reported asset or root cause asset.", "tags": ["assets"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/locations": {"get": {"operationId": "tenant_locations", "summary": "Tenant Locations", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantLocations"}}}}}, "description": "View your complete location hierarchy organized by country and structure.\nReturns the entire location tree for definitions management and asset\nplacement planning.", "tags": ["locations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_location": {"post": {"operationId": "add_location", "summary": "Add Location", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a new location to your hierarchy. Root-level locations can be assigned\na country which automatically inherits to all children. Use this to build\nyour physical or virtual location taxonomy.", "tags": ["locations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLocation"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_location/{location_id}": {"patch": {"operationId": "edit_location", "summary": "Edit Location", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "location_id", "schema": {"title": "Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Update location details including name, description, and hierarchy position.\nChanges to parent relationships reorganize your location structure.", "tags": ["locations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditLocation"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/set_location_coordinates/{location_id}": {"post": {"operationId": "set_location_coordinates", "summary": "Set Location Coordinates", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "location_id", "schema": {"title": "Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCoordinatesConflict"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Set a location's GPS coordinates from a device fix, typically captured in\nthe field. Writes above the workspace accuracy floor are rejected, and an\nexisting pin is only moved after an explicit confirmation.", "tags": ["locations"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetEntityCoordinates"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/move_location_up/{location_id}": {"patch": {"operationId": "reorder_location_up", "summary": "Reorder Location Up", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "location_id", "schema": {"title": "Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move a location up in display order within its parent group.", "tags": ["locations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/move_location_down/{location_id}": {"patch": {"operationId": "reorder_location_down", "summary": "Reorder Location Down", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "location_id", "schema": {"title": "Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move a location down in display order within its parent group.", "tags": ["locations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_location/{location_id}": {"delete": {"operationId": "delete_location", "summary": "Delete Location", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "location_id", "schema": {"title": "Location Id", "type": "string"}, "required": true}, {"in": "query", "name": "delete_descendants", "schema": {"default": false, "title": "Delete Descendants", "type": "boolean"}, "required": false}, {"in": "query", "name": "reparent_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reparent Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a location from your hierarchy. Choose to delete entire branches\nor reparent child locations to preserve structure. Cannot delete locations\nreferenced by customer assets.", "tags": ["locations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/user_notifications": {"get": {"operationId": "user_notifications", "summary": "User Notifications", "parameters": [{"in": "query", "name": "page", "schema": {"default": 1, "title": "Page", "type": "integer"}, "required": false}, {"in": "query", "name": "page_size", "schema": {"default": 20, "title": "Page Size", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputUserNotifications"}}}}}, "description": "Retrieve personalized notification feed showing recent alerts, mentions, and updates.\nPaginated results include unread count for badge display. Notifications are ordered\nby recency with priority indicators for urgent items. Essential for keeping users\ninformed without overwhelming them. Check frequently to stay current with workspace\nactivities.", "tags": ["notifications"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/mark_notification_read/{notification_id}": {"post": {"operationId": "mark_notification_read", "summary": "Mark Notification Read", "parameters": [{"in": "path", "name": "notification_id", "schema": {"title": "Notification Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Mark individual notifications as read to track user acknowledgment and clear unread\nindicators. Updates badge counts immediately across all user sessions. Useful for\nprocessing notifications one at a time while maintaining awareness of remaining items.\nRead status helps identify which team members have seen critical announcements.", "tags": ["notifications"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/mark_all_notifications_read": {"post": {"operationId": "mark_all_notifications_read", "summary": "Mark All Notifications Read", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Clear all unread notifications in a single action for inbox zero management. Useful\nafter returning from absence or when catching up on accumulated updates. Affects only\nthe current user's notifications without impacting other team members. Consider reviewing\nimportant notifications individually before bulk marking to ensure nothing critical is\nmissed.", "tags": ["notifications"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/notification_preferences": {"get": {"operationId": "notification_preferences", "summary": "Notification Preferences", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "scope", "schema": {"default": "user", "title": "Scope", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputNotificationPreferences"}}}}}, "description": "List every notification you can be sent, grouped by area, with the channels each one\ncurrently uses and whether that came from your own choice or the product default. Pass\nscope=tenant to see and tune the settings for this workspace only; the default scope=user\nis your standing preference across every workspace you belong to. A few notifications\nabout your access and credentials are always delivered and are marked as such.", "tags": ["notifications"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "patch": {"operationId": "edit_notification_preferences", "summary": "Edit Notification Preferences", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change which notifications reach you and on which channels. Send only what you are\nchanging: anything you leave out keeps its current setting. Send a setting with no\nchannels to stop overriding it and follow the product default again. Choices can be made\nfor all your workspaces at once, or for this workspace alone.", "tags": ["notifications"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditNotificationPreferences"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/notification_preferences": {"get": {"operationId": "my_notification_preferences", "summary": "My Notification Preferences", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputNotificationPreferences"}}}}}, "description": "List your notification settings across every workspace you belong to. These are your\nstanding choices: they apply wherever you work unless a workspace has its own settings,\nwhich you can review on that workspace's preferences page. A few notifications about your\naccess and credentials are always delivered and are marked as such.", "tags": ["notifications"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "patch": {"operationId": "edit_my_notification_preferences", "summary": "Edit My Notification Preferences", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Change your notification settings for every workspace at once. Send only what you are\nchanging: anything you leave out keeps its current setting, and a setting sent with no\nchannels goes back to following the product default.", "tags": ["notifications"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditNotificationPreferences"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/portal/{customer_org_id}/proposals": {"get": {"operationId": "portal_proposals", "summary": "Portal Proposals", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalProposals"}}}}}, "description": "Get proposals for customer organization.\nReturns proposal details with payment aggregations and earliest payment dates.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/proposals/{proposal_id}": {"get": {"operationId": "portal_proposal_preview", "summary": "Portal Proposal Preview", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProposalPreview"}}}}}, "description": "Get full proposal preview for a specific proposal.\nReturns complete proposal details including products, payment schedule, and acceptance information.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/proposal_pdf/{proposal_id}": {"get": {"operationId": "portal_proposal_pdf", "summary": "Portal Proposal Pdf", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download proposal as PDF for offline viewing or printing.\nReturns PDF with company branding, products, payment schedule, and acceptance information.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/projects": {"get": {"operationId": "portal_projects", "summary": "Portal Projects", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalProjects"}}}}}, "description": "Get active projects for customer organization.\nReturns project details with payment aggregations and next payment dates.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests": {"get": {"operationId": "portal_support_requests", "summary": "Portal Support Requests", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalSupportRequests"}}}}}, "description": "Get open support requests for customer organization.\nReturns active support requests with status, severity, and assignee information.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/closed_support_requests": {"get": {"operationId": "portal_closed_support_requests", "summary": "Portal Closed Support Requests", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalSupportRequests"}}}}}, "description": "Get closed support requests for customer organization.\nReturns closed support requests with resolution status.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/payments": {"get": {"operationId": "portal_payments", "summary": "Portal Payments", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalPayments"}}}}}, "description": "Get payments for customer organization.\nReturns payment schedules for both active projects and pending proposals.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/payments_chart": {"get": {"operationId": "portal_payments_chart", "summary": "Portal Payments Chart", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalPaymentsChart"}}}}}, "description": "Get payments chart data for customer organization.\nReturns monthly aggregated payments grouped by currency with project/proposal stacks.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/assets": {"get": {"operationId": "portal_assets", "summary": "Portal Assets", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalAssets"}}}}}, "description": "Get customer locations with nested portal-visible assets.\nReturns locations grouped with assets and unlocated assets.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/asset_detail/{asset_id}": {"get": {"operationId": "portal_asset_detail", "summary": "Portal Asset Detail", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalAssetDetail"}}}}}, "description": "Get asset detail for customer portal.\nReturns asset properties including category, status, location, and dates.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/asset_tickets/{asset_id}": {"get": {"operationId": "portal_asset_tickets", "summary": "Portal Asset Tickets", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalAssetTickets"}}}}}, "description": "Get support requests linked to an asset (reported_asset only).\nReturns ESRs where this asset was reported as the issue source.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/asset_closed_tickets/{asset_id}": {"get": {"operationId": "portal_asset_closed_tickets", "summary": "Portal Asset Closed Tickets", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalAssetTickets"}}}}}, "description": "Get closed support requests linked to an asset (reported_asset only).\nReturns closed ESRs where this asset was reported as the issue source.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/projects/{project_id}/products": {"get": {"operationId": "portal_project_products", "summary": "Portal Project Products", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomerPortalProjectProducts"}}}}}, "description": "Get products for a specific project in customer portal.\nReturns product list with status badges (In Progress, Finished, Accepted).", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/projects/{project_id}/products/{product_id}/history": {"get": {"operationId": "portal_product_status_history", "summary": "Portal Product Status History", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProductStatusHistoryOutput"}}}}}, "description": "Get product status history for customer portal.\nShows customer-visible statuses with consolidated durations.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/projects/{project_id}/products/{product_id}/approve": {"patch": {"operationId": "portal_approve_product", "summary": "Portal Approve Product", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Approve a deliverable waiting for your review. You confirm it meets what was agreed, and it is\naccepted.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalApproveProduct"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/projects/{project_id}/products/{product_id}/reject/{status_id}": {"patch": {"operationId": "portal_reject_product", "summary": "Portal Reject Product", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}, {"in": "path", "name": "status_id", "schema": {"title": "Status Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reject a deliverable waiting for your review, and say why. The supplier sees your reason.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalRejectProduct"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/proposals/{proposal_id}/accept": {"patch": {"operationId": "portal_accept_proposal", "summary": "Portal Accept Proposal", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Accept a proposal your supplier sent you. It becomes an active project, and your name and email\nare kept with the acceptance.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalAcceptProposal"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/quote_catalog": {"get": {"operationId": "portal_quote_catalog", "summary": "Portal Quote Catalog", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalQuoteCatalog"}}}}}, "description": "The supplier's orderable catalog items a customer may ask a quote for.\nList prices are a hint, never a commitment.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/quote_requests": {"get": {"operationId": "portal_quote_requests", "summary": "Portal Quote Requests", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalQuoteRequests"}}}}}, "description": "The organization's quote requests that are waiting for an offer.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/quote_requests/{proposal_id}": {"get": {"operationId": "portal_quote_request", "summary": "Portal Quote Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalQuoteRequest"}}}}}, "description": "One quote request waiting for an offer: the items and quantities asked for.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/add_quote_request": {"post": {"operationId": "add_quote_request", "summary": "Add Quote Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Ask the supplier for a quote on catalog items.\nThe request arrives as a proposal in the supplier's quote-request funnel; the offer comes back under Proposals.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalRequestQuote"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/quote_requests/{proposal_id}/withdraw": {"patch": {"operationId": "portal_withdraw_quote_request", "summary": "Portal Withdraw Quote Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Withdraw a quote request no offer has been sent for yet.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalWithdrawQuoteRequest"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/order_catalog": {"get": {"operationId": "portal_order_catalog", "summary": "Portal Order Catalog", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalQuoteCatalog"}}}}}, "description": "The catalog items this customer can order: offered in the portal and priced per item.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/orders": {"get": {"operationId": "portal_orders", "summary": "Portal Orders", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalOrders"}}}}}, "description": "The organization's orders under way: sent, accepted, awaiting your confirmation.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/closed_orders": {"get": {"operationId": "portal_closed_orders", "summary": "Portal Closed Orders", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalOrders"}}}}}, "description": "The organization's past orders: delivered, cancelled or rejected.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/orders/{proposal_id}": {"get": {"operationId": "portal_order", "summary": "Portal Order", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalOrder"}}}}}, "description": "One order: its items, prices, delivery details and where it is.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/add_order": {"post": {"operationId": "add_order", "summary": "Add Order", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Order items from your supplier's catalog, at the prices in your price list. Stock is checked\nwhen you send the order; the supplier accepts or rejects it, unless orders are accepted\nautomatically.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalPlaceOrder"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/orders/{proposal_id}/cancel": {"patch": {"operationId": "portal_cancel_order", "summary": "Portal Cancel Order", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Cancel an order the supplier has not accepted yet.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalCancelOrder"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/orders/{proposal_id}/confirm_receipt": {"patch": {"operationId": "portal_confirm_order_receipt", "summary": "Portal Confirm Order Receipt", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Say what of an order reached you: each item is received, not received or damaged.\nWith everything received, the order is complete.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalConfirmOrderReceipt"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/add_external_support_request": {"post": {"operationId": "add_external_support_request", "summary": "Add External Support Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Ask your supplier for help with a problem, a billing question or anything else. You get a\nreference for the request and can follow it here, in the portal.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequest"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/add_external_support_request_for_project/{project_id}": {"post": {"operationId": "add_external_support_request_for_project", "summary": "Add External Support Request For Project", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Ask your supplier for help with a project you bought: a deliverable, a problem or a question.\nThe request is linked to the project.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestForProject"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}": {"get": {"operationId": "portal_support_request_detail", "summary": "Portal Support Request Detail", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "View detailed information about a specific support request including status, severity,\nand assignment details. Track the progress of your request and review all communication\nhistory with support agents.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/timeline": {"get": {"operationId": "portal_support_request_timeline", "summary": "Portal Support Request Timeline", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "View the complete timeline of events and communications for your support request.\nShows status changes, agent assignments, and all messages exchanged with support team.\nOnly displays information marked as visible to customers.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/add_comment": {"post": {"operationId": "portal_add_support_request_comment", "summary": "Portal Add Support Request Comment", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a comment or a question to your support request. The supplier's support team sees it on the\nrequest.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestComment"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/comments/{comment_id}/edit": {"patch": {"operationId": "portal_edit_support_request_comment", "summary": "Portal Edit Support Request Comment", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit a comment you wrote, to fix a mistake or add details. It is marked as edited.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditExternalSupportRequestComment"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/comments/{comment_id}/delete": {"delete": {"operationId": "portal_delete_support_request_comment", "summary": "Portal Delete Support Request Comment", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a comment you wrote. Its replies are deleted with it, permanently.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/comments/{comment_id}/reply": {"post": {"operationId": "portal_reply_support_request_comment", "summary": "Portal Reply Support Request Comment", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reply to a comment on a support request. The reply shows under the comment; you cannot reply to\na reply.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddExternalSupportRequestComment"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/edit": {"patch": {"operationId": "portal_edit_support_request", "summary": "Portal Edit Support Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit the title, description, type or severity of your support request, as long as it is not\nclosed.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalEditExternalSupportRequest"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/close": {"patch": {"operationId": "portal_close_support_request", "summary": "Portal Close Support Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Close your support request if you no longer need it or solved the problem yourself. You can\nreopen it within a day.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/reopen": {"patch": {"operationId": "portal_reopen_support_request", "summary": "Portal Reopen Support Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reopen a support request you closed, if the problem came back. You can do this within a day of\nits last change.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/accept_solution": {"patch": {"operationId": "portal_accept_solution_external_support_request", "summary": "Portal Accept Solution External Support Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Accept a proposed solution and close the support request as resolved.\nThis confirms that the suggested fix or answer adequately addressed your issue.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/reject_solution": {"patch": {"operationId": "portal_reject_solution_external_support_request", "summary": "Portal Reject Solution External Support Request", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reject a proposed solution if it doesn't adequately resolve your issue.\nThis reopens the request and notifies the support team that more work is needed.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/files": {"get": {"operationId": "portal_support_request_files", "summary": "Portal Support Request Files", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Get list of files attached to a support request in customer portal.\nReturns file listing for the Files tab on support request detail page.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/generate_upload_url": {"post": {"operationId": "portal_generate_upload_url", "summary": "Portal Generate Upload Url", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Generate signed upload URL for attaching files to support request.\nOrg-level access: any team member from customer org can upload files.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/support_requests/{support_request_id}/generate_download_url": {"post": {"operationId": "portal_generate_download_url", "summary": "Portal Generate Download Url", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Generate signed download URL for accessing support request files.\nOrg-level access: any team member from customer org can download files.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}}}, "/api/v1/portal/{customer_org_id}/shares": {"get": {"operationId": "portal_shares", "summary": "Portal Shares", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalShares"}}}}}, "description": "List the shares the supplier published for this organization and that have not expired.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/shares/{share_id}": {"get": {"operationId": "portal_share", "summary": "Portal Share", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalShare"}}}}}, "description": "Open a share: its message and the proposals, documents and files in it, each as the customer\nmay see it. Opening it is recorded for the supplier.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/shares/{share_id}/proposal/{item_id}": {"get": {"operationId": "portal_share_proposal", "summary": "Portal Share Proposal", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalShareProposalPreview"}}}}}, "description": "Read a shared proposal in full, while it is a sent offer.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/shares/{share_id}/proposal_pdf/{item_id}": {"get": {"operationId": "portal_share_proposal_pdf", "summary": "Portal Share Proposal Pdf", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download a shared proposal as a PDF, while it is a sent offer.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/shares/{share_id}/document_pdf/{item_id}": {"get": {"operationId": "portal_share_document_pdf", "summary": "Portal Share Document Pdf", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download a shared document as a PDF, in its current version.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/shares/{share_id}/download_url/{item_id}": {"post": {"operationId": "portal_share_generate_download_url", "summary": "Portal Share Generate Download Url", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get a one-minute download link for a file in a share, as it was when it was shared.", "tags": ["portal"]}}, "/api/v1/portal/{customer_org_id}/submit_portal_form/{link_id}": {"post": {"operationId": "submit_portal_form", "summary": "Submit Portal Form", "parameters": [{"in": "path", "name": "customer_org_id", "schema": {"title": "Customer Org Id", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Submit a custom form from the customer portal.", "tags": ["portal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubmitCustomForm"}}}, "required": true}}}, "/api/v1/{tenant_path}/create_bridge/{subtenant_id}": {"post": {"operationId": "create_bridge", "summary": "Create Bridge", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a partnership invitation to another tenant for cross-organizational collaboration.\n\nThis initiates a bridge request from the current tenant to a partner tenant, using\nthe specified subtenant as a proxy for data sharing. The partner tenant must have\nbridge requests enabled in their settings to receive the invitation.\n\nGrant permissions control what data the partner can access through this bridge.\nThe invitation remains pending until the partner accepts or declines it.", "tags": ["bridge"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateBridge"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/subtenant_bridge/{subtenant_id}": {"get": {"operationId": "subtenant_bridge", "summary": "Subtenant Bridge", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSubtenantBridge"}}}}}, "description": "Get bridge information for a subtenant.\n\nReturns the bridge details if the subtenant is involved in a partnership,\nincluding tenant admin contact information and granted permissions.", "tags": ["bridge"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/bridge_history/{bridge_id}": {"get": {"operationId": "bridge_history", "summary": "Bridge History", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BridgeHistoryOutput"}}}}}, "description": "Get complete audit history for a bridge.\n\nReturns chronological timeline of all state changes, actions, and modifications\nto the partnership including who performed each action and when.", "tags": ["bridge"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/pending_bridge/{bridge_id}": {"delete": {"operationId": "delete_pending_bridge", "summary": "Delete Pending Bridge", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a pending partnership invitation.\n\nOnly bridges in pending status can be deleted. This allows the initiator\nto cancel an invitation before the partner tenant responds.", "tags": ["bridge"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/initiated_partnerships": {"get": {"operationId": "initiated_partnerships", "summary": "Initiated Partnerships", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputInitiatedPartnerships"}}}}}, "description": "Get pending partnerships initiated by this tenant.\n\nReturns list of proxy subtenants with their pending bridge invitations\nthat are waiting for partner response.", "tags": ["bridge"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/active_partners": {"get": {"operationId": "active_partners", "summary": "Active Partners", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputActivePartners"}}}}}, "description": "Get established partnerships for this tenant.\n\nReturns list of active partnerships where this tenant is either initiator\nor responder, showing the proxy subtenants and partner information.", "tags": ["bridge"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/received_partnerships": {"get": {"operationId": "received_partnerships", "summary": "Received Partnerships", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputReceivedPartnerships"}}}}}, "description": "Get pending partnership invitations received by this tenant.\n\nReturns list of invitations awaiting response with inviter details\nincluding admin contact information.", "tags": ["bridge"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/decline_bridge/{bridge_id}": {"post": {"operationId": "decline_bridge", "summary": "Decline Bridge", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Decline a pending partnership invitation from another tenant.\n\nPermanently declines the invitation, preventing future access to the inviter's\ncustomer portal. The inviting tenant will be notified of the decline.", "tags": ["bridge"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/accept_bridge/{bridge_id}": {"post": {"operationId": "accept_bridge", "summary": "Accept Bridge", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Accept a pending partnership invitation from another tenant.\n\nEstablishes an active partnership by selecting a proxy subtenant and configuring\nthe permissions to grant the partner. Both parties can then access shared data\naccording to the configured grants.", "tags": ["bridge"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AcceptBridge"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_bridge_grants/{bridge_id}": {"patch": {"operationId": "edit_bridge_grants", "summary": "Edit Bridge Grants", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Modify partnership access permissions for an active collaboration.\n\nAllows you to update what data and features your partner can access through\nthis partnership. You can grant or revoke access to proposals, projects, products,\npayments, and support requests at any time while the partnership is active.", "tags": ["bridge"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditBridgeGrants"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/suspend_bridge/{bridge_id}": {"patch": {"operationId": "suspend_bridge", "summary": "Suspend Bridge", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Temporarily suspend an active partnership.\n\nSuspending a partnership blocks all data access through the bridge while preserving\nthe relationship and all permissions. The partnership can be reactivated later\nwithout reconfiguring grants. Use this for temporary pauses rather than termination.", "tags": ["bridge"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SuspendBridge"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unsuspend_bridge/{bridge_id}": {"patch": {"operationId": "unsuspend_bridge", "summary": "Unsuspend Bridge", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reactivate a suspended partnership.\n\nRestores data access through the bridge using the previously configured grants.\nOnly the tenant that suspended the partnership can unsuspend it.", "tags": ["bridge"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UnsuspendBridge"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/terminate_bridge/{bridge_id}": {"patch": {"operationId": "terminate_bridge", "summary": "Terminate Bridge", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Permanently terminate an active or suspended partnership.\n\nThis action is irreversible. It immediately and permanently ends the partnership,\nrevoking all data access through the bridge. The bridge record is preserved for\naudit purposes but cannot be reactivated.", "tags": ["bridge"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/TerminateBridge"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/proposals": {"get": {"operationId": "partner_portal_proposals", "summary": "Partner Portal Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalProposals"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get partner's proposals visible through bridge.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/proposal_preview/{proposal_id}": {"get": {"operationId": "partner_portal_proposal_preview", "summary": "Partner Portal Proposal Preview", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get full proposal preview for partner portal.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/proposal_pdf/{proposal_id}": {"get": {"operationId": "partner_portal_proposal_pdf", "summary": "Partner Portal Proposal Pdf", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Download proposal as PDF for offline viewing or printing.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/accept_partner_proposal": {"post": {"operationId": "accept_partner_proposal", "summary": "Accept Partner Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Accept a proposal your partner sent you. If it answers one of your RFPs, the RFP is awarded to\nthis partner.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AcceptPartnerProposal"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/projects/{project_id}/products/{product_id}/approve": {"patch": {"operationId": "partner_approve_product", "summary": "Partner Approve Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Approve a deliverable waiting for your review. It is accepted, and your partner is notified.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerApproveProduct"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/projects/{project_id}/products/{product_id}/reject/{status_id}": {"patch": {"operationId": "partner_reject_product", "summary": "Partner Reject Product", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}, {"in": "path", "name": "product_id", "schema": {"title": "Product Id", "type": "string"}, "required": true}, {"in": "path", "name": "status_id", "schema": {"title": "Status Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reject a deliverable waiting for your review, and say why. Your partner sees your reason.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerRejectProduct"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/projects": {"get": {"operationId": "partner_portal_projects", "summary": "Partner Portal Projects", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalProjects"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get partner's active projects visible through bridge.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/projects/{project_id}/products": {"get": {"operationId": "partner_portal_project_products", "summary": "Partner Portal Project Products", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalProjectProducts"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get detailed project view for a specific project in partner portal.\nReturns product deliverables with status badges, payment schedule, and escalation contacts.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/payments": {"get": {"operationId": "partner_portal_payments", "summary": "Partner Portal Payments", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalPayments"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get partner's payments from proposals and active projects visible through bridge.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/payments_chart": {"get": {"operationId": "partner_portal_payments_chart", "summary": "Partner Portal Payments Chart", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Get partner's payments chart data grouped by month and currency.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/assets": {"get": {"operationId": "partner_portal_assets", "summary": "Partner Portal Assets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalAssets"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get partner's assets visible through bridge, grouped by location.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/support_requests": {"get": {"operationId": "partner_portal_support_requests", "summary": "Partner Portal Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalSupportRequests"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get support requests between partners visible through bridge.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/closed_support_requests": {"get": {"operationId": "partner_portal_closed_support_requests", "summary": "Partner Portal Closed Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalSupportRequests"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get closed support requests for this specific bridge/partner (last 100, newest first).", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/all_partners/proposals": {"get": {"operationId": "all_partners_proposals", "summary": "All Partners Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AllPartnersProposals"}}}}}, "description": "Get proposals from all active partnerships.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/all_partners/projects": {"get": {"operationId": "all_partners_projects", "summary": "All Partners Projects", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AllPartnersProjects"}}}}}, "description": "Get projects from all active partnerships.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/all_partners/payments": {"get": {"operationId": "all_partners_payments", "summary": "All Partners Payments", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AllPartnersPayments"}}}}}, "description": "Get payments from all active partnerships.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/all_partners/payments_chart": {"get": {"operationId": "all_partners_payments_chart", "summary": "All Partners Payments Chart", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}}, "description": "Get aggregated payments chart data from all partnerships grouped by month and currency.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/all_partners/support_requests": {"get": {"operationId": "all_partners_support_requests", "summary": "All Partners Support Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AllPartnersSupportRequests"}}}}}, "description": "Get support requests from all active partnerships.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/support_request_types": {"get": {"operationId": "partner_portal_support_request_types", "summary": "Partner Portal Support Request Types", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalSupportRequestTypes"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get available support request types and severities for partner portal.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/add_support_request": {"post": {"operationId": "partner_portal_add_support_request", "summary": "Partner Portal Add Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Ask your partner for help with a problem, a question about your work together or anything else.\nYou can link the request to a project or a product, and follow it here.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddPartnerSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/support/{support_request_id}": {"get": {"operationId": "partner_portal_support_request_detail", "summary": "Partner Portal Support Request Detail", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalSupportRequestDetail"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get detailed view of support request.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/support/{support_request_id}/timeline": {"get": {"operationId": "partner_portal_support_request_timeline", "summary": "Partner Portal Support Request Timeline", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get support request timeline with events and comments.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/support/{support_request_id}/files": {"get": {"operationId": "partner_portal_support_request_files", "summary": "Partner Portal Support Request Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerPortalFileNames"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get support request files.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/support/{support_request_id}/generate_upload_url": {"post": {"operationId": "partner_portal_generate_upload_url", "summary": "Partner Portal Generate Upload Url", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UploadUrlGCS"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIError"}}}}}, "description": "Generate upload URL for partner portal support request files.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestUploadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/support/{support_request_id}/generate_download_url": {"post": {"operationId": "partner_portal_generate_download_url", "summary": "Partner Portal Generate Download Url", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Generate download URL for partner portal support request files.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/support/{support_request_id}/mark_file_as_deleted": {"post": {"operationId": "partner_portal_mark_file_as_deleted", "summary": "Partner Portal Mark File As Deleted", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Mark file as deleted for partner portal support request.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDeleteFileGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/add_support_request_comment": {"post": {"operationId": "partner_portal_add_support_request_comment", "summary": "Partner Portal Add Support Request Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a comment or question to your support request. All comments you add are automatically\nvisible to support agents and will be included in the request timeline. Use this to provide\nadditional information, answer agent questions, or check on request status.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddPartnerSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/edit_support_request/{support_request_id}": {"patch": {"operationId": "partner_portal_edit_support_request", "summary": "Partner Portal Edit Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Update the title, description, type, or severity of your support request. This helps ensure\nyour request contains accurate information and is properly categorized for faster resolution.\nYou can edit requests that haven't been closed yet.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditPartnerSupportRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/close_support_request/{support_request_id}/{bridge_id}": {"patch": {"operationId": "partner_portal_close_support_request", "summary": "Partner Portal Close Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Close your support request if it's no longer needed or the issue has been resolved independently.\nClosed requests can be reopened within 24 hours if needed.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/reopen_support_request/{support_request_id}/{bridge_id}": {"patch": {"operationId": "partner_portal_reopen_support_request", "summary": "Partner Portal Reopen Support Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "410": {"description": "Gone", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reopen a recently closed support request if the issue has returned or wasn't fully resolved.\nRequests can be reopened within 24 hours of closure.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/accept_solution/{support_request_id}/{bridge_id}": {"patch": {"operationId": "partner_portal_accept_solution", "summary": "Partner Portal Accept Solution", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Partner accepts proposed solution and closes request as resolved.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/reject_solution/{support_request_id}/{bridge_id}": {"patch": {"operationId": "partner_portal_reject_solution", "summary": "Partner Portal Reject Solution", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Partner rejects proposed solution and reopens request.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/edit_comment/{support_request_id}/{comment_id}": {"patch": {"operationId": "partner_portal_edit_comment", "summary": "Partner Portal Edit Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Edit a comment you wrote, to fix a mistake or add details. It is marked as edited.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditPartnerSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/delete_comment/{support_request_id}/{comment_id}/{bridge_id}": {"delete": {"operationId": "partner_portal_delete_comment", "summary": "Partner Portal Delete Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a comment you wrote. Its replies are deleted with it, permanently.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/reply_comment/{support_request_id}/{comment_id}": {"post": {"operationId": "partner_portal_reply_comment", "summary": "Partner Portal Reply Comment", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}, {"in": "path", "name": "comment_id", "schema": {"title": "Comment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reply to a comment on a support request. The reply shows under the comment; you cannot reply to\na reply.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddPartnerSupportRequestComment"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal_solicitation_files/{publication_id}": {"get": {"operationId": "partner_portal_solicitation_files", "summary": "Partner Portal Solicitation Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "publication_id", "schema": {"title": "Publication Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFileNames"}}}}}, "description": "Access files attached to a solicitation (RFP from partner's perspective).\nPartners with active publications can view and download RFP documents.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal_solicitation_download_url/{rfp_id}": {"post": {"operationId": "partner_portal_solicitation_download_url", "summary": "Partner Portal Solicitation Download Url", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DownloadUrlGCS"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Generate download URL for solicitation files. Partners can download RFP\ndocuments to review requirements before responding. URL expires after 1 minute.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequestDownloadUrlGCS"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/quote_catalog": {"get": {"operationId": "partner_portal_quote_catalog", "summary": "Partner Portal Quote Catalog", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalQuoteCatalog"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Your partner's catalog items you may ask a quote for.\nList prices are a hint, never a commitment.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/quote_requests": {"get": {"operationId": "partner_portal_quote_requests", "summary": "Partner Portal Quote Requests", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalQuoteRequests"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Your quote requests to this partner that are waiting for an offer.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/quote_requests/{proposal_id}": {"get": {"operationId": "partner_portal_quote_request", "summary": "Partner Portal Quote Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalQuoteRequest"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "One quote request waiting for an offer: the items and quantities asked for.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/add_quote_request": {"post": {"operationId": "add_partner_quote_request", "summary": "Add Partner Quote Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Ask your partner for a quote on their catalog items.\nThe request arrives as a proposal in their quote-request funnel; the offer comes back under Proposals.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalRequestQuote"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/quote_requests/{proposal_id}/withdraw": {"patch": {"operationId": "partner_portal_withdraw_quote_request", "summary": "Partner Portal Withdraw Quote Request", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Withdraw a quote request no offer has been sent for yet.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalWithdrawQuoteRequest"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/order_catalog": {"get": {"operationId": "partner_portal_order_catalog", "summary": "Partner Portal Order Catalog", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalQuoteCatalog"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "The catalog items you can order from this partner: offered in the portal and priced per item.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/orders": {"get": {"operationId": "partner_portal_orders", "summary": "Partner Portal Orders", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalOrders"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Your orders to this partner under way: sent, accepted, awaiting your confirmation.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/closed_orders": {"get": {"operationId": "partner_portal_closed_orders", "summary": "Partner Portal Closed Orders", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalOrders"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Your past orders to this partner: delivered, cancelled or rejected.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/orders/{proposal_id}": {"get": {"operationId": "partner_portal_order", "summary": "Partner Portal Order", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalOrder"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "One order: its items, prices, delivery details and where it is.", "tags": ["partnerportal"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/add_order": {"post": {"operationId": "add_partner_order", "summary": "Add Partner Order", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Order items from your partner's catalog, at the prices in your price list. Stock is checked when\nyou send the order; your partner accepts or rejects it, unless orders are accepted\nautomatically.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalPlaceOrder"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/orders/{proposal_id}/cancel": {"patch": {"operationId": "partner_portal_cancel_order", "summary": "Partner Portal Cancel Order", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Cancel an order your partner has not accepted yet.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalCancelOrder"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_portal/{bridge_id}/orders/{proposal_id}/confirm_receipt": {"patch": {"operationId": "partner_portal_confirm_order_receipt", "summary": "Partner Portal Confirm Order Receipt", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Say what of an order reached you: each item is received, not received or damaged.\nWith everything received, the order is complete.", "tags": ["partnerportal"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalConfirmOrderReceipt"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_rfp": {"post": {"operationId": "add_rfp", "summary": "Add Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Create a request for proposal to get offers from your partners. It starts as a draft: publish it\nto partners when it is ready.", "tags": ["rfp"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddRFP"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/tenant_rfps": {"get": {"operationId": "tenant_rfps", "summary": "Tenant Rfps", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTenantRFPs"}}}}}, "description": "List active RFPs created by this tenant.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/our_rfps": {"get": {"operationId": "our_rfps", "summary": "Our Rfps", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputOurRFPs"}}}}}, "description": "List all RFPs created by this tenant (all statuses).", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/incoming_rfps": {"get": {"operationId": "incoming_rfps", "summary": "Incoming Rfps", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputIncomingRFPs"}}}}}, "description": "List RFPs published to this tenant by partners (solicitations).", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/rfp_detail/{rfp_id}": {"get": {"operationId": "rfp_detail", "summary": "Rfp Detail", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputRFPDetail"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Get full details of an RFP created by this tenant.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/solicitation_detail/{publication_id}": {"get": {"operationId": "solicitation_detail", "summary": "Solicitation Detail", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "publication_id", "schema": {"title": "Publication Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputSolicitationDetail"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "A solicitation is a request for proposal sent to you by one of your\npartners. Review the requirements, budget, and deadline to decide\nwhether to submit a proposal or decline.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/publish_rfp_to_partners": {"post": {"operationId": "publish_rfp_to_partners", "summary": "Publish Rfp To Partners", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Send your request for proposal to the partners you choose. Their managers are notified, and each\npartner says whether it will send a proposal or declines. Partners that already have it are\nskipped.", "tags": ["rfp"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PublishRFPToPartners"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/accept_solicitation/{publication_id}": {"post": {"operationId": "accept_solicitation", "summary": "Accept Solicitation", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "publication_id", "schema": {"title": "Publication Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Indicate that you intend to submit a proposal for this solicitation.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/decline_solicitation/{publication_id}": {"post": {"operationId": "decline_solicitation", "summary": "Decline Solicitation", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "publication_id", "schema": {"title": "Publication Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Indicate that you will not be submitting a proposal for this solicitation.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/remove_publication/{publication_id}": {"delete": {"operationId": "remove_publication", "summary": "Remove Publication", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "publication_id", "schema": {"title": "Publication Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a declined partner from an RFP. Only partners who have declined can be removed.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/shortlist_publication/{publication_id}": {"post": {"operationId": "shortlist_publication", "summary": "Shortlist Publication", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "publication_id", "schema": {"title": "Publication Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Add a partner who accepted the solicitation to the shortlist for final evaluation.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unshortlist_publication/{publication_id}": {"post": {"operationId": "unshortlist_publication", "summary": "Unshortlist Publication", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "publication_id", "schema": {"title": "Publication Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a partner from the shortlist.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/close_rfp/{rfp_id}": {"post": {"operationId": "close_rfp", "summary": "Close Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Close an RFP to stop accepting partner intents and begin evaluation.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reopen_rfp/{rfp_id}": {"post": {"operationId": "reopen_rfp", "summary": "Reopen Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Reopen a closed RFP to accept more partner intents.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/award_rfp/{rfp_id}/{publication_id}": {"post": {"operationId": "award_rfp", "summary": "Award Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}, {"in": "path", "name": "publication_id", "schema": {"title": "Publication Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Award an RFP to a shortlisted partner.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/cancel_rfp/{rfp_id}": {"post": {"operationId": "cancel_rfp", "summary": "Cancel Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Cancel an RFP. Can be done from any status except already cancelled.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_rfp/{rfp_id}": {"patch": {"operationId": "edit_rfp", "summary": "Edit Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Edit an RFP. Full editing in DRAFT, limited editing in PUBLISHED/CLOSED.", "tags": ["rfp"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditRFP"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_rfp/{rfp_id}": {"delete": {"operationId": "delete_rfp", "summary": "Delete Rfp", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "rfp_id", "schema": {"title": "Rfp Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete an RFP. Only draft RFPs can be deleted.", "tags": ["rfp"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/overview/kpis": {"get": {"operationId": "analytics_overview_kpis", "summary": "Analytics Overview Kpis", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OverviewKPIs"}}}}}, "description": "Executive KPIs for the Overview dashboard. Provides high-level metrics\nacross all business domains with status indicators and contextual information.\nShows revenue health, project portfolio status, pipeline health, and resource status.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/overview/alerts": {"get": {"operationId": "analytics_overview_alerts", "summary": "Analytics Overview Alerts", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "filter_severity", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "required": false}, {"in": "query", "name": "filter_category", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsAlerts"}}}}}, "description": "Business health alerts requiring attention. Identifies critical issues across\nall domains: overdue payments, at-risk projects, SLA breaches, resource\noverallocation, and other actionable items for executive review.\n\nFilters:\n    filter_severity: critical, warning, info (comma-separated for multiple)\n    filter_category: financial, delivery, resources, sales, support", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/overview/trends": {"get": {"operationId": "analytics_overview_trends", "summary": "Analytics Overview Trends", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsTrends"}}}}}, "description": "Business trend indicators showing period-over-period changes. Compares\ncurrent performance against previous periods to identify growth patterns,\nseasonal variations, and emerging opportunities or risks.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/cashflow/overview": {"get": {"operationId": "analytics_cashflow_overview", "summary": "Analytics Cashflow Overview", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsCashflowOverview"}}}}}, "description": "General Cash Flow overview combining ALL income vs ALL payments across the\nentire business. Shows scheduled vs realized amounts, net position, and\ncash health indicators. The unified view of financial flow unique to this platform.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/cashflow/projections": {"get": {"operationId": "analytics_cashflow_projections", "summary": "Analytics Cashflow Projections", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "horizon", "schema": {"default": "12m", "enum": ["3m", "6m", "12m", "24m"], "title": "Horizon", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsCashflowProjections"}}}}}, "description": "Cash flow projections by fiscal period. Forecasts future cash position based\non scheduled payments, probability-weighted pipeline, and historical collection\npatterns. Organized by Q1-Q4 fiscal quarters with monthly granularity.\n\nParams:\n    horizon: Projection horizon (3m, 6m, 12m, 24m)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/cashflow/breakdown": {"get": {"operationId": "analytics_cashflow_breakdown", "summary": "Analytics Cashflow Breakdown", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "filter_type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsCashflowBreakdown"}}}}}, "description": "Cash flow breakdown by source. Shows income and payments separated by domain:\nproposals, projects, support contracts, and other sources. Helps identify\nwhich business areas contribute most to cash flow health.\n\nFilters:\n    filter_type: 'income' or 'payments' to show only one side", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/sales/kpis": {"get": {"operationId": "analytics_sales_kpis", "summary": "Analytics Sales Kpis", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SalesKPIs"}}}}}, "description": "Sales KPIs for the Sales dashboard. Provides pipeline health and deal flow status\nwith stage breakdown, win rate vs benchmark, deal size distribution, and active\ndeal health. Status indicators show whether metrics are healthy or need attention.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/sales/pipeline": {"get": {"operationId": "analytics_sales_pipeline", "summary": "Analytics Sales Pipeline", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "funnel_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Funnel Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSalesPipeline"}}}}}, "description": "Sales pipeline analysis with value distribution across stages. Shows deal\ncounts, weighted pipeline value, and stage velocity metrics. Identifies\nbottlenecks and opportunities for pipeline optimization.\n\nThis is a SNAPSHOT view showing current pipeline state regardless of period.\nThe period parameter is included for UI consistency but doesn't filter data.\n\nParams:\n    funnel_id: Optional funnel external_id. If not provided, returns data\n               for the first active funnel.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/sales/performance": {"get": {"operationId": "analytics_sales_performance", "summary": "Analytics Sales Performance", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSalesPerformance"}}}}}, "description": "Sales performance metrics across three dimensions: salespeople, customers, products.\n\nLists every salesperson with revenue, deals won and lost, and win rate, alongside the top\ncustomers and products. Supports period-based comparisons for trend analysis.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_sales": {"get": {"operationId": "my_sales", "summary": "My Sales", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSalespersonSales"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Your own won deals for the period, with revenue, win rate and average deal size.\n\nEvery member can open this for themselves; it takes no member id, so it can only ever return\nthe caller's own figures.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/salesperson_sales/{member_id}": {"get": {"operationId": "salesperson_sales", "summary": "Salesperson Sales", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSalespersonSales"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "One salesperson's won deals for the period, reached from the sales dashboard.\n\nSame numbers as the dashboard row for that person, listed deal by deal.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/sales/conversion": {"get": {"operationId": "analytics_sales_conversion", "summary": "Analytics Sales Conversion", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}, {"in": "query", "name": "funnel_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Funnel Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSalesConversion"}}}}}, "description": "Sales conversion funnel analysis. Tracks conversion rates between stages,\ndrop-off points, and win/loss reasons. Identifies process improvements\nto increase overall conversion effectiveness.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)\n    funnel_id: Optional funnel external_id. If None, uses first active funnel.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/sales/forecast": {"get": {"operationId": "analytics_sales_forecast", "summary": "Analytics Sales Forecast", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "horizon", "schema": {"default": "3m", "enum": ["3m", "6m", "12m", "24m"], "title": "Horizon", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSalesForecast"}}}}}, "description": "Sales forecasting based on current pipeline. Projects future revenue by\nweighting pipeline deals by stage probability and grouping by expected\nclose date. Aggregates ALL deals across ALL funnels.\n\nNote: Comparisons (YoY, PoP) are not applicable to forecasts since\nforecasts are projections, not historical data.\n\nParams:\n    period: Period selection (affects bucket granularity)\n    horizon: Projection horizon (3m, 6m, 12m, 24m) - default 3m", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/financial/kpis": {"get": {"operationId": "analytics_financial_kpis", "summary": "Analytics Financial Kpis", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FinancialKPIs"}}}}}, "description": "Financial KPIs for the Financial dashboard. Provides revenue vs target, margin\nhealth, AR aging summary, and DSO status. Each metric includes contextual\nstatus indicators to show financial health at a glance.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/financial/revenue": {"get": {"operationId": "analytics_financial_revenue", "summary": "Analytics Financial Revenue", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsFinancialRevenue"}}}}}, "description": "Revenue analysis with recognition timing and trends. Shows recurring vs\none-time revenue, revenue by product/service line, and growth metrics.\nSupports fiscal period breakdowns for accurate reporting.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/financial/costs": {"get": {"operationId": "analytics_financial_costs", "summary": "Analytics Financial Costs", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsFinancialCosts"}}}}}, "description": "Cost analysis with category breakdowns. Shows direct costs, overhead\nallocation, and cost trends over time. Identifies cost optimization\nopportunities and margin improvement areas.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/financial/margins": {"get": {"operationId": "analytics_financial_margins", "summary": "Analytics Financial Margins", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsFinancialMargins"}}}}}, "description": "Margin analytics by product, service, project, and customer. Shows gross\nand contribution margins with trend analysis. Identifies high and low\nmargin activities for portfolio optimization.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/financial/aging": {"get": {"operationId": "analytics_financial_aging", "summary": "Analytics Financial Aging", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsFinancialAging"}}}}}, "description": "AR/AP aging analysis with collection risk indicators. Shows receivables\nand payables by aging bucket (current, 30, 60, 90+ days). Identifies\ncollection issues and cash flow timing risks.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/delivery/kpis": {"get": {"operationId": "analytics_delivery_kpis", "summary": "Analytics Delivery Kpis", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeliveryKPIs"}}}}}, "description": "Delivery KPIs for the Delivery dashboard. Provides project portfolio health\ndistribution, on-time delivery status, health score breakdown by dimension,\nand milestone urgency indicators. Status badges show portfolio health.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/delivery/projects": {"get": {"operationId": "analytics_delivery_projects", "summary": "Analytics Delivery Projects", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsDeliveryProjects"}}}}}, "description": "Project portfolio health analysis. Shows project status distribution,\nbudget vs actual, and schedule performance. Identifies at-risk projects\nrequiring intervention.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/delivery/milestones": {"get": {"operationId": "analytics_delivery_milestones", "summary": "Analytics Delivery Milestones", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsDeliveryMilestones"}}}}}, "description": "Milestone tracking and delivery metrics. Shows on-time delivery rates,\nupcoming milestones, and milestone slip trends. Critical for customer\ncommunication and project planning.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/delivery/health": {"get": {"operationId": "analytics_delivery_health", "summary": "Analytics Delivery Health", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsDeliveryHealth"}}}}}, "description": "Delivery health score aggregation. Combines schedule, budget, scope, and\nquality indicators into actionable health metrics. Provides early warning\nfor project risk escalation.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/resources/kpis": {"get": {"operationId": "analytics_resources_kpis", "summary": "Analytics Resources Kpis", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourcesKPIs"}}}}}, "description": "Equipment KPIs for the Resources dashboard. Utilization against the optimal band, the hours\nstill free, how the fleet splits across over/optimal/under, and how many resources carry no\nweekly schedule and therefore cannot be rated at all.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/resources/utilization": {"get": {"operationId": "analytics_resources_utilization", "summary": "Analytics Resources Utilization", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsResourcesUtilization"}}}}}, "description": "Equipment utilization over the selected period: booked hours against available hours, broken\ndown per resource and per category, with an optional comparison against the previous period.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/resources/capacity": {"get": {"operationId": "analytics_resources_capacity", "summary": "Analytics Resources Capacity", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "horizon", "schema": {"default": "6m", "enum": ["3m", "6m", "12m", "24m"], "title": "Horizon", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsResourcesCapacity"}}}}}, "description": "Capacity planning. The hours still free this month per resource, plus a month-by-month\nprojection of booked demand against available capacity across the horizon.\n\nParams:\n    horizon: Projection horizon (3m, 6m, 12m, 24m)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/resources/allocation": {"get": {"operationId": "analytics_resources_allocation", "summary": "Analytics Resources Allocation", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsResourcesAllocation"}}}}}, "description": "Where the equipment is committed: booked hours by project and by the client that project is\nfor, plus the counts of over- and under-allocated resources.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/support/kpis": {"get": {"operationId": "analytics_support_kpis", "summary": "Analytics Support Kpis", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SupportKPIs"}}}}}, "description": "Support KPIs for the Support dashboard. Provides ticket volume with severity\nbreakdown, SLA compliance vs target, resolution efficiency status, and customer\nsatisfaction scores. Each metric includes status badges for quick assessment.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/support/tickets": {"get": {"operationId": "analytics_support_tickets", "summary": "Analytics Support Tickets", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSupportTickets"}}}}}, "description": "Support ticket volume and distribution analysis. Shows ticket counts by\ntype, severity, queue, and status. Identifies trends and staffing needs\nfor support operations.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/support/sla": {"get": {"operationId": "analytics_support_sla", "summary": "Analytics Support Sla", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSupportSLA"}}}}}, "description": "Support performance metrics. Shows resolution times by severity,\nresolution outcomes distribution, and queue backlog. Historical data\nwith optional comparison.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/support/trends": {"get": {"operationId": "analytics_support_trends", "summary": "Analytics Support Trends", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsSupportTrends"}}}}}, "description": "Support trend analysis over time. Shows ticket volume trends, resolution\ntime improvements, and seasonal patterns. Helps predict support demand\nand plan staffing accordingly.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/forms/kpis": {"get": {"operationId": "analytics_forms_kpis", "summary": "Analytics Forms Kpis", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "form_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Form Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FormsKPIs"}}}}}, "description": "Form-collection KPIs for the Forms dashboard. Shows active forms, submissions\nreceived in the period with a source split, the review backlog, and the\nreview rate with status badges for quick assessment.\n\nParams:\n    form_id: Optional form to scope the submission metrics to", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/forms/volume": {"get": {"operationId": "analytics_forms_volume", "summary": "Analytics Forms Volume", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}, {"in": "query", "name": "form_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Form Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsFormsVolume"}}}}}, "description": "Form submission volume over time. Shows monthly submission counts for the\nselected period and the change against a comparison window.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)\n    form_id: Optional form to scope the series to", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/forms/breakdown": {"get": {"operationId": "analytics_forms_breakdown", "summary": "Analytics Forms Breakdown", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}, {"in": "query", "name": "form_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Form Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsFormsBreakdown"}}}}}, "description": "Submission distributions for the selected period. Splits responses by review\nstatus (new, reviewed, archived) and by source (direct, asset, process stage,\ncustomer portal, partner portal, sales funnel), with per-slice change against\na comparison window.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)\n    form_id: Optional form to scope the distributions to", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/forms/top": {"get": {"operationId": "analytics_forms_top", "summary": "Analytics Forms Top", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "period", "schema": {"default": "YTD", "enum": ["YTD", "QTD", "MTD", "R12", "Q1", "Q2", "Q3", "Q4"], "title": "Period", "type": "string"}, "required": false}, {"in": "query", "name": "compare", "schema": {"default": "none", "enum": ["none", "yoy", "pop", "mom"], "title": "Compare", "type": "string"}, "required": false}, {"in": "query", "name": "form_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Form Id"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalyticsFormsTop"}}}}}, "description": "The busiest forms in the selected period, ranked by submissions received, with\nper-form change against a comparison window. Each entry links to the form's\nsubmission review page.\n\nParams:\n    compare: Comparison mode (none, yoy, pop, mom)\n    form_id: Optional form to scope the ranking to", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/team_load": {"get": {"operationId": "team_load", "summary": "Team Load", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TeamLoadSchema"}}}}}, "description": "Get team load data for the team load page.\nReturns aggregated load data for all team members.\nThis endpoint is specifically for the team load page display.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/analytics/resources_load": {"get": {"operationId": "resources_load", "summary": "Resources Load", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ResourceLoadSchema"}}}}}, "description": "Get resource load data for the resource load page.\nReturns aggregated load data for all resources.\nThis endpoint is specifically for the resource load page display.", "tags": ["analytics"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/my_profile": {"get": {"operationId": "my_profile", "summary": "My Profile", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyProfile"}}}}}, "description": "Read your account profile: name, email, and the language the platform\nuses for you. The language applies everywhere you sign in, on the web\nand in the mobile app alike.", "tags": ["welcome"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "patch": {"operationId": "edit_my_profile", "summary": "Edit My Profile", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Update your account profile. Changing the language takes effect across\nthe web and the mobile app; anything you leave out keeps its current\nvalue.", "tags": ["welcome"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditMyProfile"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/my_tenants": {"get": {"operationId": "my_tenants", "summary": "My Tenants", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyTenants"}}}}}, "description": "Retrieve the list of workspaces the current user belongs to, with\nactive memberships only. Each tenant includes its logo URL and an\nis_owner flag. Also returns pending invitations the user hasn't\nacted on yet.", "tags": ["welcome"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/my_work_items": {"get": {"operationId": "my_work_items", "summary": "My Work Items", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyWorkItems"}}}}}, "description": "Retrieve all unfinished work items assigned to the current user across all\nworkspaces. Items are grouped by urgency: overdue, due today, due this week,\nupcoming, and no date. Each item includes tenant and project context for\ncross-workspace navigation.", "tags": ["welcome"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/my_tickets": {"get": {"operationId": "my_tickets", "summary": "My Tickets", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyTickets"}}}}}, "description": "Retrieve all open support tickets (internal and external) assigned to the\ncurrent user across all workspaces. Tickets are sorted by severity, with\nthe most urgent tickets first. Includes direct links to each ticket.", "tags": ["welcome"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/my_bookings": {"get": {"operationId": "my_bookings", "summary": "My Bookings", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyBookings"}}}}}, "description": "Retrieve current and upcoming team bookings for the current user across\nall workspaces. Bookings are split into 'current' (started but not ended)\nand 'upcoming' (not yet started) groups.", "tags": ["welcome"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/my_operational_items": {"get": {"operationId": "my_operational_items", "summary": "My Operational Items", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyOperationalItems"}}}}}, "description": "Retrieve operational work items relevant to the current user across all\nworkspaces. Items are grouped into approvals (awaiting user's review),\npending approval (user's items at approval stages), and active tasks\n(user's items at non-approval stages). Only includes items from processes\nwhere the user has participation.", "tags": ["welcome"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_work_items": {"get": {"operationId": "tenant_my_work_items", "summary": "Tenant My Work Items", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyWorkItems"}}}}}, "description": "Retrieve the unfinished work items assigned to the current user in this\nworkspace, grouped by urgency: overdue, due today, due this week, upcoming,\nand no date. The counts describe this workspace only.", "tags": ["welcome"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/my_bookings": {"get": {"operationId": "tenant_my_bookings", "summary": "Tenant My Bookings", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputMyBookings"}}}}}, "description": "Retrieve the current and upcoming team bookings held by the current user in\nthis workspace, split into current and upcoming.", "tags": ["welcome"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/enrich_company/{cui}": {"get": {"operationId": "enrich_company", "summary": "Enrich Company", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "cui", "schema": {"title": "Cui", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CompanyEnrichmentResultSchema"}}}}}, "description": "Look up a Romanian company by CUI via the ANAF public API.\nReturns company name, registration number, VAT status, and address.\nUsed to auto-fill legal entity forms.", "tags": ["integrations"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/webhooks": {"get": {"operationId": "tenant_webhooks", "summary": "Tenant Webhooks", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWebhooks"}}}}}, "tags": ["webhooks"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/webhook_deliveries/{webhook_id}": {"get": {"operationId": "webhook_deliveries", "summary": "Webhook Deliveries", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "webhook_id", "schema": {"title": "Webhook Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWebhookDeliveries"}}}}}, "tags": ["webhooks"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_webhook": {"post": {"operationId": "add_webhook", "summary": "Add Webhook", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WebhookCreated"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["webhooks"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddWebhook"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_webhook/{webhook_id}": {"patch": {"operationId": "edit_webhook", "summary": "Edit Webhook", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "webhook_id", "schema": {"title": "Webhook Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["webhooks"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditWebhook"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_webhook/{webhook_id}": {"delete": {"operationId": "delete_webhook", "summary": "Delete Webhook", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "webhook_id", "schema": {"title": "Webhook Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "500": {"description": "Internal Server Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["webhooks"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/test_webhook/{webhook_id}": {"post": {"operationId": "test_webhook", "summary": "Test Webhook", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "webhook_id", "schema": {"title": "Webhook Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputTestWebhookResult"}}}}}, "tags": ["webhooks"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/TestWebhook"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/custom_forms": {"get": {"operationId": "list_custom_forms", "summary": "List Custom Forms", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomForms"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/custom_form/{form_id}": {"get": {"operationId": "get_custom_form", "summary": "Get Custom Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputCustomForm"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "patch": {"operationId": "edit_custom_form", "summary": "Edit Custom Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditCustomForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_custom_form", "summary": "Delete Custom Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/form_versions/{form_id}": {"get": {"operationId": "list_form_versions", "summary": "List Form Versions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFormVersions"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/form_fields/{version_id}": {"get": {"operationId": "list_form_fields", "summary": "List Form Fields", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "version_id", "schema": {"title": "Version Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputFormFields"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/custom_form": {"post": {"operationId": "create_custom_form", "summary": "Create Custom Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddCustomForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/purge_custom_form_submissions/{form_id}": {"delete": {"operationId": "purge_custom_form_submissions", "summary": "Purge Custom Form Submissions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Permanently delete every response captured by a form. Use it to honour an erasure request, or\nto clear out a form's responses so the form itself can be deleted. Download the responses first\nif you still need them: they cannot be recovered afterwards.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/form_version/{form_id}": {"post": {"operationId": "create_form_version", "summary": "Create Form Version", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/publish_form_version/{version_id}": {"post": {"operationId": "publish_form_version", "summary": "Publish Form Version", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "version_id", "schema": {"title": "Version Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/rollback_form_version/{version_id}": {"post": {"operationId": "rollback_form_version", "summary": "Rollback Form Version", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "version_id", "schema": {"title": "Version Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_form_field/{version_id}": {"post": {"operationId": "add_form_field", "summary": "Add Form Field", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "version_id", "schema": {"title": "Version Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddFormField"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_form_field/{field_id}": {"patch": {"operationId": "edit_form_field", "summary": "Edit Form Field", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "field_id", "schema": {"title": "Field Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditFormField"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_form_field/{field_id}": {"delete": {"operationId": "delete_form_field", "summary": "Delete Form Field", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "field_id", "schema": {"title": "Field Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reorder_form_field_up/{field_id}": {"patch": {"operationId": "reorder_form_field_up", "summary": "Reorder Form Field Up", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "field_id", "schema": {"title": "Field Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move a field one position up among its step's siblings.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reorder_form_field_down/{field_id}": {"patch": {"operationId": "reorder_form_field_down", "summary": "Reorder Form Field Down", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "field_id", "schema": {"title": "Field Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Move a field one position down among its step's siblings.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/submit_form/{form_id}": {"post": {"operationId": "submit_custom_form", "summary": "Submit Custom Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Standalone submission (no entity context) reached from the form-definition pages.", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubmitCustomForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/preview_submit_form/{form_id}": {"post": {"operationId": "preview_submit_custom_form", "summary": "Preview Submit Custom Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Preview-as-respondent (M-5): validate a fill exactly as a real submit would, but persist nothing.", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubmitCustomForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/submit_asset_form/{attachment_id}": {"post": {"operationId": "submit_asset_form", "summary": "Submit Asset Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "attachment_id", "schema": {"title": "Attachment Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Submit an asset's attached form. The CustomerAssetForm link id carries the form + asset\ncontext, so no context query params or payload keys are needed.", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubmitCustomForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/submit_work_item_form/{item_id}/{form_id}": {"post": {"operationId": "submit_work_item_form", "summary": "Submit Work Item Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Submit a stage-gated form for a work item. Both ids are required: the form is attached to\na shared stage but filled per work item (the gate identity is per (work item, form)).", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubmitCustomForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/form_submissions/{form_id}": {"get": {"operationId": "form_submissions", "summary": "Form Submissions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FormSubmissionsSchema"}}}}}, "description": "Full submission set for a form, as the client-side datatable payload (Option A).", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/form_submission_detail/{submission_id}": {"get": {"operationId": "form_submission_detail", "summary": "Form Submission Detail", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "submission_id", "schema": {"title": "Submission Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FormSubmissionDetailSchema"}}}}}, "description": "Render a single submission as a key/value detail panel for the review modal.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_submission_status": {"post": {"operationId": "edit_submission_status", "summary": "Edit Submission Status", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditSubmissionStatus"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_submission/{submission_id}": {"delete": {"operationId": "delete_submission", "summary": "Delete Submission", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "submission_id", "schema": {"title": "Submission Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/asset_forms/{asset_id}": {"get": {"operationId": "asset_forms", "summary": "Asset Forms", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputAssetForms"}}}}}, "description": "List the forms attached to a customer asset (with per-link submission counts).", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/asset_form_submissions/{asset_id}": {"get": {"operationId": "asset_form_submissions", "summary": "Asset Form Submissions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FormSubmissionsSchema"}}}}}, "description": "Entity-scoped submissions datatable: only this asset's submissions, across attached forms.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/attach_form_to_asset/{asset_id}": {"post": {"operationId": "attach_form_to_asset", "summary": "Attach Form To Asset", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Attach a custom form to a customer asset (idempotent via UniqueConstraint).", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AttachFormToAsset"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/detach_form_from_asset/{asset_id}/{link_id}": {"delete": {"operationId": "detach_form_from_asset", "summary": "Detach Form From Asset", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Detach a form from an asset. Submissions are retained (context becomes stale).", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/process_stage_forms/{stage_id}": {"get": {"operationId": "process_stage_forms", "summary": "Process Stage Forms", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputProcessStageForms"}}}}}, "description": "List the forms attached to a process stage (admin process-definition view).", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_stage_forms/{item_id}": {"get": {"operationId": "work_item_stage_forms", "summary": "Work Item Stage Forms", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemStageForms"}}}}}, "description": "The current stage's forms for one work item, with this item's completion state.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/work_item_submissions/{item_id}": {"get": {"operationId": "work_item_submissions", "summary": "Work Item Submissions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputWorkItemSubmissions"}}}}}, "description": "Every form response captured for one work item, across all the stages it has passed through.\nThis is what the work item's Form data section shows.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/attach_form_to_process_stage/{stage_id}": {"post": {"operationId": "attach_form_to_process_stage", "summary": "Attach Form To Process Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Attach a custom form to a process stage with its gating policy (idempotent).", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AttachFormToProcessStage"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/detach_form_from_process_stage/{stage_id}/{link_id}": {"delete": {"operationId": "detach_form_from_process_stage", "summary": "Detach Form From Process Stage", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "stage_id", "schema": {"title": "Stage Id", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Detach a form from a process stage. Submissions are retained (context becomes stale).", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_form_step/{version_id}": {"post": {"operationId": "add_form_step", "summary": "Add Form Step", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "version_id", "schema": {"title": "Version Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a step to a form version (multi-step builder).", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddFormStep"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_form_step/{step_id}": {"patch": {"operationId": "edit_form_step", "summary": "Edit Form Step", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "step_id", "schema": {"title": "Step Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Edit a step's title / description / submit-button text.", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditFormStep"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_form_step/{step_id}": {"delete": {"operationId": "delete_form_step", "summary": "Delete Form Step", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "step_id", "schema": {"title": "Step Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Delete a step (reassigns its fields to the first remaining step; keeps \u22651 step).", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/reorder_form_steps/{version_id}": {"post": {"operationId": "reorder_form_steps", "summary": "Reorder Form Steps", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "version_id", "schema": {"title": "Version Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Rewrite step ordering from an ordered list of step external_ids.", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReorderFormSteps"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/validate_form_step/{form_id}": {"post": {"operationId": "validate_form_step", "summary": "Validate Form Step", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "form_id", "schema": {"title": "Form Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Stateless per-step validation for the multi-step submission UI (stores nothing).", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ValidateFormStep"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/subtenant_portal_forms/{subtenant_id}": {"get": {"operationId": "subtenant_portal_forms", "summary": "Subtenant Portal Forms", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPortalFormLinks"}}}}}, "description": "List the forms published to a customer subtenant's portal (admin management view).", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/portal_form_submissions/{subtenant_id}/{link_id}": {"get": {"operationId": "portal_form_submissions", "summary": "Portal Form Submissions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PortalFormSubmissionsSchema"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "One published portal form's submissions as the per-form datatable on the customer Form-data page.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/attach_portal_form/{subtenant_id}": {"post": {"operationId": "attach_portal_form", "summary": "Attach Portal Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "subtenant_id", "schema": {"title": "Subtenant Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Publish a custom form to a customer subtenant's portal.", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AttachPortalForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/detach_portal_form/{link_id}": {"delete": {"operationId": "detach_portal_form", "summary": "Detach Portal Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a form from a customer subtenant's portal.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/bridge_partner_forms/{bridge_id}": {"get": {"operationId": "bridge_partner_forms", "summary": "Bridge Partner Forms", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputPartnerPortalFormLinks"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "List the forms this tenant published to a partner bridge (admin management view).", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_form_submissions/{bridge_id}/{link_id}": {"get": {"operationId": "partner_form_submissions", "summary": "Partner Form Submissions", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PartnerFormSubmissionsSchema"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "One published partner form's submissions as the per-form datatable in the FORMS tab.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/attach_partner_portal_form/{bridge_id}": {"post": {"operationId": "attach_partner_portal_form", "summary": "Attach Partner Portal Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Publish a custom form to a partner bridge.", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AttachPartnerPortalForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/detach_partner_portal_form/{link_id}": {"delete": {"operationId": "detach_partner_portal_form", "summary": "Detach Partner Portal Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Remove a form from a partner bridge.", "tags": ["custom_forms"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/partner_submit_partner_form/{bridge_id}/{link_id}": {"post": {"operationId": "partner_submit_partner_form", "summary": "Partner Submit Partner Form", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "bridge_id", "schema": {"title": "Bridge Id", "type": "string"}, "required": true}, {"in": "path", "name": "link_id", "schema": {"title": "Link Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"additionalProperties": true, "title": "Response", "type": "object"}}}}}, "description": "Submit a partner-portal form (gated by the bridge's form-submit grant).", "tags": ["custom_forms"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubmitCustomForm"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_templates_list": {"get": {"operationId": "tenant_document_templates_list", "summary": "Tenant Document Templates List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocumentTemplates"}}}}}, "description": "List the workspace's document templates.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_template": {"post": {"operationId": "add_document_template", "summary": "Add Document Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Create a document template.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddDocumentTemplate"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_template/{template_id}": {"patch": {"operationId": "edit_document_template", "summary": "Edit Document Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Edit a document template.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditDocumentTemplate"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_document_template", "summary": "Delete Document Template", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "template_id", "schema": {"title": "Template Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Delete a document template.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_series_list": {"get": {"operationId": "tenant_document_series_list", "summary": "Tenant Document Series List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocumentSeriesList"}}}}}, "description": "List the workspace's numbering series.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_series": {"post": {"operationId": "add_document_series", "summary": "Add Document Series", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Create a numbering series.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddDocumentSeries"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/document_series/{series_id}": {"patch": {"operationId": "edit_document_series", "summary": "Edit Document Series", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "series_id", "schema": {"title": "Series Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Edit a numbering series.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditDocumentSeries"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}, "delete": {"operationId": "delete_document_series", "summary": "Delete Document Series", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "series_id", "schema": {"title": "Series Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Delete a numbering series.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_general_document": {"post": {"operationId": "generate_general_document", "summary": "Generate General Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Generate a workspace-level document with no entity anchor.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_org_document/{org_id}": {"post": {"operationId": "generate_org_document", "summary": "Generate Org Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Generate a document for a customer organization.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_customer_asset_document/{asset_id}": {"post": {"operationId": "generate_customer_asset_document", "summary": "Generate Customer Asset Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Generate a document for a customer asset.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_location_document/{location_id}": {"post": {"operationId": "generate_location_document", "summary": "Generate Location Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "location_id", "schema": {"title": "Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Generate a document for a location.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_internal_support_request_document/{support_request_id}": {"post": {"operationId": "generate_internal_support_request_document", "summary": "Generate Internal Support Request Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Generate a document for an internal support request.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_external_support_request_document/{support_request_id}": {"post": {"operationId": "generate_external_support_request_document", "summary": "Generate External Support Request Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Generate a document for an external support request.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_operational_work_item_document/{work_item_id}": {"post": {"operationId": "generate_operational_work_item_document", "summary": "Generate Operational Work Item Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Generate a document for a task.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/generate_proposal_document/{proposal_id}": {"post": {"operationId": "generate_proposal_document", "summary": "Generate Proposal Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Generate a document for a proposal.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_document/{document_id}": {"patch": {"operationId": "edit_document", "summary": "Edit Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Edit a draft document.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/finalize_document/{document_id}": {"post": {"operationId": "finalize_document", "summary": "Finalize Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Finalize a draft document, assigning its series number and locking the content.", "tags": ["documents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/FinalizeDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_document/{document_id}": {"delete": {"operationId": "delete_document", "summary": "Delete Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "document_id", "schema": {"title": "Document Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Delete a document.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/documents_list": {"get": {"operationId": "tenant_documents_list", "summary": "Tenant Documents List", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "query", "name": "exclude_mode", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Invert filter logic to exclude matching results", "title": "Exclude Mode"}, "required": false, "description": "Invert filter logic to exclude matching results"}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Search by title or number", "q": ["title__icontains", "full_number__icontains"], "title": "Search"}, "required": false, "description": "Search by title or number"}, {"in": "query", "name": "status", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by status", "q": "status__iexact", "title": "Status"}, "required": false, "description": "Filter by status"}, {"in": "query", "name": "context_type", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by attached entity type", "title": "Context Type"}, "required": false, "description": "Filter by attached entity type"}, {"in": "query", "name": "series_code", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by series", "q": "series_code__iexact", "title": "Series Code"}, "required": false, "description": "Filter by series"}, {"in": "query", "name": "template", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by source template", "q": "template__external_id", "title": "Template"}, "required": false, "description": "Filter by source template"}, {"in": "query", "name": "org_id", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by customer", "q": "org_id__iexact", "title": "Org Id"}, "required": false, "description": "Filter by customer"}, {"in": "query", "name": "tags1", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (first set)", "title": "Tags1"}, "required": false, "description": "Filter by tags (first set)"}, {"in": "query", "name": "tags2", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (second set)", "title": "Tags2"}, "required": false, "description": "Filter by tags (second set)"}, {"in": "query", "name": "tags3", "schema": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "description": "Filter by tags (third set)", "title": "Tags3"}, "required": false, "description": "Filter by tags (third set)"}, {"in": "query", "name": "label_id1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (first set - select which label)", "title": "Label Id1"}, "required": false, "description": "Filter by label (first set - select which label)"}, {"in": "query", "name": "label_op1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (first set)", "title": "Label Op1"}, "required": false, "description": "Label comparison operator (first set)"}, {"in": "query", "name": "label_val1", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (first set)", "title": "Label Val1"}, "required": false, "description": "Label value to compare against (first set)"}, {"in": "query", "name": "label_id2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (second set - select which label)", "title": "Label Id2"}, "required": false, "description": "Filter by label (second set - select which label)"}, {"in": "query", "name": "label_op2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (second set)", "title": "Label Op2"}, "required": false, "description": "Label comparison operator (second set)"}, {"in": "query", "name": "label_val2", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (second set)", "title": "Label Val2"}, "required": false, "description": "Label value to compare against (second set)"}, {"in": "query", "name": "label_id3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Filter by label (third set - select which label)", "title": "Label Id3"}, "required": false, "description": "Filter by label (third set - select which label)"}, {"in": "query", "name": "label_op3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label comparison operator (third set)", "title": "Label Op3"}, "required": false, "description": "Label comparison operator (third set)"}, {"in": "query", "name": "label_val3", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Label value to compare against (third set)", "title": "Label Val3"}, "required": false, "description": "Label value to compare against (third set)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocuments"}}}}}, "description": "List all documents in the workspace archive.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_documents/{org_id}": {"get": {"operationId": "org_documents", "summary": "Org Documents", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocuments"}}}}}, "description": "List documents attached to a customer organization.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/customer_asset_documents/{asset_id}": {"get": {"operationId": "customer_asset_documents", "summary": "Customer Asset Documents", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "asset_id", "schema": {"title": "Asset Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocuments"}}}}}, "description": "List documents attached to a customer asset.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/location_documents/{location_id}": {"get": {"operationId": "location_documents", "summary": "Location Documents", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "location_id", "schema": {"title": "Location Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocuments"}}}}}, "description": "List documents attached to a location.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/internal_support_request_documents/{support_request_id}": {"get": {"operationId": "internal_support_request_documents", "summary": "Internal Support Request Documents", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocuments"}}}}}, "description": "List documents attached to an internal support request.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/external_support_request_documents/{support_request_id}": {"get": {"operationId": "external_support_request_documents", "summary": "External Support Request Documents", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "support_request_id", "schema": {"title": "Support Request Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocuments"}}}}}, "description": "List documents attached to an external support request.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/operational_work_item_documents/{work_item_id}": {"get": {"operationId": "operational_work_item_documents", "summary": "Operational Work Item Documents", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "work_item_id", "schema": {"title": "Work Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocuments"}}}}}, "description": "List documents attached to a task.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/proposal_documents/{proposal_id}": {"get": {"operationId": "proposal_documents", "summary": "Proposal Documents", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "proposal_id", "schema": {"title": "Proposal Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputDocuments"}}}}}, "description": "List documents attached to a proposal.", "tags": ["documents"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/org_shares/{org_id}": {"get": {"operationId": "org_shares", "summary": "Org Shares", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputShares"}}}}}, "description": "List the shares of a customer organization, newest first, with their state and how many\nproposals, documents and files each holds.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share/{org_id}": {"post": {"operationId": "add_share", "summary": "Add Share", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "org_id", "schema": {"title": "Org Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Create a share for a customer organization. It starts as a draft the customer cannot see:\nadd proposals, documents and files to it, then publish it.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShare"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/edit_share/{share_id}": {"patch": {"operationId": "edit_share", "summary": "Edit Share", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Change a share's title, message or language. Omitted fields keep their value; the changes\nshow to the customer at once.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EditShare"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/publish_share/{share_id}": {"patch": {"operationId": "publish_share", "summary": "Publish Share", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}, "429": {"description": "Too Many Requests", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}}, "description": "Publish a share, or the changes waiting in a published one, and set until when the customer\ncan see it. Publishing the first file of a share with a link retires the link, after confirmation.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PublishShare"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/unpublish_share/{share_id}": {"patch": {"operationId": "unpublish_share", "summary": "Unpublish Share", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Take a published share back. The customer no longer sees it; everything in it is kept, and\npublishing it again shows it again.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/delete_share/{share_id}": {"delete": {"operationId": "delete_share", "summary": "Delete Share", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Delete a share, with its activity log. A published share must be unpublished first.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/share_proposals/{share_id}": {"get": {"operationId": "share_proposals", "summary": "Share Proposals", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputShareProposals"}}}}}, "description": "List the proposals in a share, with what the customer sees of each: the offer as shared, an\nupdated offer, or a note that it is being revised, accepted or no longer available.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share_proposal/{share_id}": {"post": {"operationId": "add_share_proposal", "summary": "Add Share Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a sent proposal of the organization to a share. On a published share it waits until the\nchanges are published.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShareProposal"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/remove_share_proposal/{share_id}/{item_id}": {"delete": {"operationId": "remove_share_proposal", "summary": "Remove Share Proposal", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Remove a proposal from a share. The customer stops seeing it at once.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/share_documents/{share_id}": {"get": {"operationId": "share_documents", "summary": "Share Documents", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputShareDocuments"}}}}}, "description": "List the documents in a share. A document edited since it was shared stays visible to the\ncustomer in its new version, marked as changed with the time of the edit.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share_org_document/{share_id}": {"post": {"operationId": "add_share_org_document", "summary": "Add Share Org Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add one of the organization's finalized documents to a share. Adding an edited document\nagain shares its new content and clears its Modified mark.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShareDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share_customer_asset_document/{share_id}": {"post": {"operationId": "add_share_customer_asset_document", "summary": "Add Share Customer Asset Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a finalized document of one of the organization's assets to a share.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShareDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share_external_support_request_document/{share_id}": {"post": {"operationId": "add_share_external_support_request_document", "summary": "Add Share External Support Request Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a finalized document of one of the organization's support requests to a share.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShareDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share_proposal_document/{share_id}": {"post": {"operationId": "add_share_proposal_document", "summary": "Add Share Proposal Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a finalized document of one of the organization's proposals to a share.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShareDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share_general_document/{share_id}": {"post": {"operationId": "add_share_general_document", "summary": "Add Share General Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a general finalized document, one without personal or confidential data, to a share.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShareDocument"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/remove_share_document/{share_id}/{item_id}": {"delete": {"operationId": "remove_share_document", "summary": "Remove Share Document", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Remove a document from a share. The customer stops seeing it at once.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/share_files/{share_id}": {"get": {"operationId": "share_files", "summary": "Share Files", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputShareFiles"}}}}}, "description": "List the files in a share, marking those replaced or deleted since they were shared. Files\nare available to the customer only in the customer portal.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share_org_file/{share_id}": {"post": {"operationId": "add_share_org_file", "summary": "Add Share Org File", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a file uploaded to the organization. A share holding a file is available only in the\ncustomer portal, never through a link.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShareOrgFile"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/add_share_proposal_file/{share_id}": {"post": {"operationId": "add_share_proposal_file", "summary": "Add Share Proposal File", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Add a file uploaded to one of the organization's proposals or projects. A share holding a\nfile is available only in the customer portal, never through a link.", "tags": ["shares"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddShareProposalFile"}}}, "required": true}, "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/remove_share_file/{share_id}/{item_id}": {"delete": {"operationId": "remove_share_file", "summary": "Remove Share File", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}, {"in": "path", "name": "item_id", "schema": {"title": "Item Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Remove a file from a share. The customer stops seeing it at once.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/share_accesses/{share_id}/{page_number}": {"get": {"operationId": "share_accesses", "summary": "Share Accesses", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}, {"in": "path", "name": "page_number", "schema": {"title": "Page Number", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OutputShareAccesses"}}}}}, "description": "List a share's activity, newest first, one page at a time: who opened it, which items they\nviewed or downloaded, and through which channel. `next_page` is 0 on the last page.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}, "/api/v1/{tenant_path}/remove_share_link/{share_id}": {"patch": {"operationId": "remove_share_link", "summary": "Remove Share Link", "parameters": [{"in": "path", "name": "tenant_path", "schema": {"title": "Tenant Path", "type": "string"}, "required": true}, {"in": "path", "name": "share_id", "schema": {"title": "Share Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "400": {"description": "Bad Request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "404": {"description": "Not Found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "409": {"description": "Conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/APIResponse"}}}}, "422": {"description": "Unprocessable Content", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PydanticDetail"}}}}}, "description": "Remove the share's link: it shows a page saying it is not available. The share stays in the\ncustomer portal.", "tags": ["shares"], "security": [{"XSessionTokenAuth": []}, {"AuthBearer": []}, {"SessionAuth": []}]}}}, "components": {"schemas": {"OutputTenantInfo": {"description": "Output schema for tenant preferences/info (GET endpoint).", "properties": {"name": {"title": "Name", "type": "string"}, "timezone": {"title": "Timezone", "type": "string"}, "default_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Currency"}, "country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Country"}, "minimum_acceptable_margin": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Minimum Acceptable Margin"}, "bridge_requests_allowed": {"default": false, "title": "Bridge Requests Allowed", "type": "boolean"}, "plan": {"anyOf": [{"$ref": "#/components/schemas/PlanInfo"}, {"type": "null"}]}}, "required": ["name", "timezone"], "title": "OutputTenantInfo", "type": "object"}, "PlanInfo": {"description": "User-facing plan summary. No internal slugs or IDs.", "properties": {"name": {"title": "Name", "type": "string"}, "features": {"items": {"type": "string"}, "title": "Features", "type": "array"}, "limits": {"additionalProperties": {"type": "integer"}, "title": "Limits", "type": "object"}}, "required": ["name", "features", "limits"], "title": "PlanInfo", "type": "object"}, "OutputTenantLegalInfo": {"description": "Output schema for tenant legal information (GET endpoint).", "properties": {"legal_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Name"}, "legal_country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country"}, "legal_country_registration_id_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Registration Id Name"}, "legal_country_registration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Registration Id"}, "legal_country_tax_id_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 1 Name"}, "legal_country_tax_id_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 1"}, "legal_country_tax_id_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 2 Name"}, "legal_country_tax_id_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 2"}, "legal_country_tax_id_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 3 Name"}, "legal_country_tax_id_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 3"}, "legal_world_tax_id_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 1 Name"}, "legal_world_tax_id_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 1"}, "legal_world_tax_id_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 2 Name"}, "legal_world_tax_id_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 2"}, "legal_world_tax_id_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 3 Name"}, "legal_world_tax_id_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 3"}, "legal_other_identifier_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 1 Name"}, "legal_other_identifier_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 1"}, "legal_other_identifier_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 2 Name"}, "legal_other_identifier_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 2"}, "legal_other_identifier_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 3 Name"}, "legal_other_identifier_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 3"}, "legal_region": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Region"}, "legal_city": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal City"}, "legal_address_line_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Address Line 1"}, "legal_address_line_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Address Line 2"}, "legal_postal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Postal Code"}}, "title": "OutputTenantLegalInfo", "type": "object"}, "OutputTenantProjectDefaults": {"description": "Output schema for tenant project default settings (GET endpoint).", "properties": {"enable_booking_management": {"default": true, "title": "Enable Booking Management", "type": "boolean"}, "enable_resource_management": {"default": true, "title": "Enable Resource Management", "type": "boolean"}, "enable_effort_management": {"default": true, "title": "Enable Effort Management", "type": "boolean"}, "enable_financial_management": {"default": true, "title": "Enable Financial Management", "type": "boolean"}, "enable_schedule_management": {"default": true, "title": "Enable Schedule Management", "type": "boolean"}, "enable_earned_value_management": {"default": false, "title": "Enable Earned Value Management", "type": "boolean"}, "default_wbs_configuration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Wbs Configuration Id"}, "default_wbs_configuration_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Wbs Configuration Name"}}, "title": "OutputTenantProjectDefaults", "type": "object"}, "OutputTenantPortalSettings": {"description": "Output schema for tenant customer portal settings (GET endpoint).", "properties": {"portal_top_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Top Message"}, "portal_bottom_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Bottom Message"}, "portal_menu_background_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Menu Background Color"}, "portal_menu_link_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Menu Link Color"}, "portal_menu_divider_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Menu Divider Color"}, "portal_logo_background_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Logo Background Color"}, "portal_background_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Background Color"}, "portal_button_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Button Color"}, "portal_icon_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Icon Color"}, "portal_orders_auto_accept": {"default": false, "title": "Portal Orders Auto Accept", "type": "boolean"}, "portal_orders_payment_terms": {"default": "on_accept", "title": "Portal Orders Payment Terms", "type": "string"}, "portal_orders_payment_days": {"default": 0, "title": "Portal Orders Payment Days", "type": "integer"}}, "title": "OutputTenantPortalSettings", "type": "object"}, "APIResponse": {"properties": {"response_id": {"title": "Response Id", "type": "string"}, "success": {"title": "Success", "type": "boolean"}, "message": {"title": "Message", "type": "string"}, "url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Url"}}, "required": ["response_id", "success", "message"], "title": "APIResponse", "type": "object"}, "EditTenant": {"properties": {"name": {"anyOf": [{"maxLength": 100, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "Name"}, "timezone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Timezone"}, "default_currency": {"anyOf": [{"maxLength": 3, "minLength": 0, "type": "string"}, {"type": "null"}], "title": "Default Currency"}, "country": {"anyOf": [{"maxLength": 3, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "Country"}, "minimum_acceptable_margin": {"anyOf": [{"maximum": 100.0, "minimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d{0,2}0*$", "type": "string"}, {"type": "null"}], "title": "Minimum Acceptable Margin"}, "bridge_requests_allowed": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Bridge Requests Allowed"}, "lead_visibility": {"anyOf": [{"enum": ["open", "own_and_pool", "own_and_lists"], "type": "string"}, {"type": "null"}], "title": "Lead Visibility"}, "geo_capture_max_accuracy_m": {"anyOf": [{"maximum": 200, "minimum": 10, "type": "integer"}, {"type": "null"}], "title": "Geo Capture Max Accuracy M"}, "geofence_enabled": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Geofence Enabled"}, "geofence_radius_m": {"anyOf": [{"maximum": 10000, "minimum": 10, "type": "integer"}, {"type": "null"}], "title": "Geofence Radius M"}}, "title": "EditTenant", "type": "object"}, "EditTenantLegalInfo": {"description": "Schema for editing tenant (workspace) legal info", "properties": {"legal_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Name"}, "legal_country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country"}, "legal_country_registration_id_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Registration Id Name"}, "legal_country_registration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Registration Id"}, "legal_country_tax_id_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 1 Name"}, "legal_country_tax_id_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 1"}, "legal_country_tax_id_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 2 Name"}, "legal_country_tax_id_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 2"}, "legal_country_tax_id_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 3 Name"}, "legal_country_tax_id_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 3"}, "legal_world_tax_id_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 1 Name"}, "legal_world_tax_id_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 1"}, "legal_world_tax_id_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 2 Name"}, "legal_world_tax_id_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 2"}, "legal_world_tax_id_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 3 Name"}, "legal_world_tax_id_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 3"}, "legal_other_identifier_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 1 Name"}, "legal_other_identifier_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 1"}, "legal_other_identifier_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 2 Name"}, "legal_other_identifier_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 2"}, "legal_other_identifier_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 3 Name"}, "legal_other_identifier_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 3"}, "legal_region": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Region"}, "legal_city": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal City"}, "legal_address_line_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Address Line 1"}, "legal_address_line_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Address Line 2"}, "legal_postal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Postal Code"}}, "title": "EditTenantLegalInfo", "type": "object"}, "EditTenantProjectDefaults": {"description": "Schema for updating default project settings.", "properties": {"project_enable_booking_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Booking Management"}, "project_enable_resource_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Resource Management"}, "project_enable_effort_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Effort Management"}, "project_enable_financial_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Financial Management"}, "project_enable_schedule_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Schedule Management"}, "project_enable_earned_value_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Earned Value Management"}, "wbsconfiguration": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbsconfiguration"}}, "title": "EditTenantProjectDefaults", "type": "object"}, "PydanticDetail": {"description": "Field-level validation errors: one entry per field that was refused.", "properties": {"detail": {"items": {"$ref": "#/components/schemas/PydanticDetailItem"}, "title": "Detail", "type": "array"}}, "required": ["detail"], "title": "PydanticDetail", "type": "object"}, "PydanticDetailItem": {"description": "One per-field error inside a 422 ``detail`` array.", "properties": {"type": {"title": "Type", "type": "string"}, "loc": {"items": {"type": "string"}, "title": "Loc", "type": "array"}, "msg": {"title": "Msg", "type": "string"}}, "required": ["type", "loc", "msg"], "title": "PydanticDetailItem", "type": "object"}, "EditTenantPortalSettings": {"description": "Schema for updating customer portal customization settings.", "properties": {"portal_top_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Top Message"}, "portal_bottom_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Bottom Message"}, "use_portal_menu_background_color": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Use Portal Menu Background Color"}, "use_portal_menu_link_color": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Use Portal Menu Link Color"}, "use_portal_menu_divider_color": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Use Portal Menu Divider Color"}, "use_portal_logo_background_color": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Use Portal Logo Background Color"}, "use_portal_background_color": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Use Portal Background Color"}, "use_portal_button_color": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Use Portal Button Color"}, "use_portal_icon_color": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Use Portal Icon Color"}, "portal_menu_background_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Menu Background Color"}, "portal_menu_link_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Menu Link Color"}, "portal_menu_divider_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Menu Divider Color"}, "portal_logo_background_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Logo Background Color"}, "portal_background_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Background Color"}, "portal_button_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Button Color"}, "portal_icon_color": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Icon Color"}, "portal_order_funnel": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Order Funnel"}, "portal_orders_auto_accept": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Portal Orders Auto Accept"}, "portal_orders_payment_terms": {"anyOf": [{"enum": ["none", "on_accept", "on_delivery"], "type": "string"}, {"type": "null"}], "title": "Portal Orders Payment Terms"}, "portal_orders_payment_days": {"anyOf": [{"maximum": 365, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Portal Orders Payment Days"}, "portal_orders_new_org_default": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Portal Orders New Org Default"}, "portal_quote_requests_new_org_default": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Portal Quote Requests New Org Default"}, "portal_orders_new_bridge_default": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Portal Orders New Bridge Default"}, "portal_new_org_price_list": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal New Org Price List"}, "portal_new_bridge_price_list": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal New Bridge Price List"}, "portal_quote_requests_new_bridge_default": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Portal Quote Requests New Bridge Default"}, "portal_quote_funnel": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Quote Funnel"}}, "title": "EditTenantPortalSettings", "type": "object"}, "BusinessProcessArtifact": {"description": "Input or output artifact for a business process", "properties": {"model_name": {"title": "Model Name", "type": "string"}, "business_friendly_name": {"title": "Business Friendly Name", "type": "string"}, "external_description": {"title": "External Description", "type": "string"}, "source_process": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Source Process"}}, "required": ["model_name", "business_friendly_name", "external_description"], "title": "BusinessProcessArtifact", "type": "object"}, "BusinessProcessTask": {"description": "Individual task within a business process", "properties": {"task_number": {"title": "Task Number", "type": "integer"}, "description": {"title": "Description", "type": "string"}, "branch_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Branch Type"}, "user_has_permission": {"title": "User Has Permission", "type": "boolean"}, "permission_display": {"default": "", "title": "Permission Display", "type": "string"}}, "required": ["task_number", "description", "user_has_permission"], "title": "BusinessProcessTask", "type": "object"}, "OutputBusinessProcess": {"description": "Business process details with all tasks", "properties": {"process_name": {"title": "Process Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "tasks": {"items": {"$ref": "#/components/schemas/BusinessProcessTask"}, "title": "Tasks", "type": "array"}, "input_artifacts": {"items": {"$ref": "#/components/schemas/BusinessProcessArtifact"}, "title": "Input Artifacts", "type": "array"}, "modification_artifacts": {"items": {"$ref": "#/components/schemas/BusinessProcessArtifact"}, "title": "Modification Artifacts", "type": "array"}, "output_artifacts": {"items": {"$ref": "#/components/schemas/BusinessProcessArtifact"}, "title": "Output Artifacts", "type": "array"}, "highlight_task": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Highlight Task"}}, "required": ["process_name", "description", "tasks", "input_artifacts", "modification_artifacts", "output_artifacts"], "title": "OutputBusinessProcess", "type": "object"}, "BusinessProcessCategory": {"description": "Category grouping of business processes", "properties": {"category_name": {"title": "Category Name", "type": "string"}, "category_key": {"title": "Category Key", "type": "string"}, "processes": {"items": {"$ref": "#/components/schemas/BusinessProcessSummary"}, "title": "Processes", "type": "array"}}, "required": ["category_name", "category_key", "processes"], "title": "BusinessProcessCategory", "type": "object"}, "BusinessProcessSummary": {"description": "Summary of a business process for listing", "properties": {"process_key": {"title": "Process Key", "type": "string"}, "process_name": {"title": "Process Name", "type": "string"}, "description": {"title": "Description", "type": "string"}}, "required": ["process_key", "process_name", "description"], "title": "BusinessProcessSummary", "type": "object"}, "OutputBusinessProcessesList": {"description": "All business processes grouped by category", "properties": {"categories": {"items": {"$ref": "#/components/schemas/BusinessProcessCategory"}, "title": "Categories", "type": "array"}}, "required": ["categories"], "title": "OutputBusinessProcessesList", "type": "object"}, "FormerTeamMember": {"description": "A former team member, excluded from the workspace: the name they had, and when and by whom\nthey were excluded.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "avatar_url": {"title": "Avatar Url", "type": "string"}, "excluded_at": {"format": "date-time", "title": "Excluded At", "type": "string"}, "excluded_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Excluded By"}}, "required": ["id", "name", "avatar_url", "excluded_at"], "title": "FormerTeamMember", "type": "object"}, "InvitationOutput": {"properties": {"id": {"title": "Id", "type": "string"}, "email": {"title": "Email", "type": "string"}, "timestamp": {"format": "date-time", "title": "Timestamp", "type": "string"}}, "required": ["id", "email", "timestamp"], "title": "InvitationOutput", "type": "object"}, "TeamMember": {"properties": {"id": {"title": "Id", "type": "string"}, "first_name": {"title": "First Name", "type": "string"}, "last_name": {"title": "Last Name", "type": "string"}, "email": {"title": "Email", "type": "string"}, "phone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Phone"}, "avatar_url": {"title": "Avatar Url", "type": "string"}, "active": {"title": "Active", "type": "integer"}}, "required": ["id", "first_name", "last_name", "email", "avatar_url", "active"], "title": "TeamMember", "type": "object"}, "TeamMembers": {"properties": {"members": {"items": {"$ref": "#/components/schemas/TeamMember"}, "title": "Members", "type": "array"}, "invitations": {"items": {"$ref": "#/components/schemas/InvitationOutput"}, "title": "Invitations", "type": "array"}, "former_members": {"default": [], "items": {"$ref": "#/components/schemas/FormerTeamMember"}, "title": "Former Members", "type": "array"}}, "required": ["members", "invitations"], "title": "TeamMembers", "type": "object"}, "BookingInfoSchema": {"description": "Individual booking information", "properties": {"name": {"title": "Name", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "hours": {"title": "Hours", "type": "number"}, "only_working_days": {"title": "Only Working Days", "type": "boolean"}, "project_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}}, "required": ["name", "project_name", "hours", "only_working_days"], "title": "BookingInfoSchema", "type": "object"}, "DayColumnSchema": {"description": "Column header for a day in the week.", "properties": {"date": {"format": "date", "title": "Date", "type": "string"}, "is_today": {"title": "Is Today", "type": "boolean"}}, "required": ["date", "is_today"], "title": "DayColumnSchema", "type": "object"}, "DayLoadDataSchema": {"description": "Load data for a single day", "properties": {"booked": {"title": "Booked", "type": "number"}, "available": {"title": "Available", "type": "number"}, "display": {"title": "Display", "type": "string"}, "is_holiday": {"title": "Is Holiday", "type": "boolean"}, "is_today": {"title": "Is Today", "type": "boolean"}, "holiday_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Holiday Name"}, "bookings": {"anyOf": [{"items": {"$ref": "#/components/schemas/BookingInfoSchema"}, "type": "array"}, {"type": "null"}], "title": "Bookings"}, "percentage": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Percentage"}}, "required": ["booked", "available", "display", "is_holiday", "is_today"], "title": "DayLoadDataSchema", "type": "object"}, "MemberLoadDetailSchema": {"description": "Detailed load data for an individual team member", "properties": {"member_id": {"title": "Member Id", "type": "string"}, "member_name": {"title": "Member Name", "type": "string"}, "period": {"title": "Period", "type": "string"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "week_dates": {"items": {"$ref": "#/components/schemas/DayColumnSchema"}, "title": "Week Dates", "type": "array"}, "week_label": {"title": "Week Label", "type": "string"}, "week_number": {"title": "Week Number", "type": "integer"}, "is_current": {"title": "Is Current", "type": "boolean"}, "is_past": {"title": "Is Past", "type": "boolean"}, "is_future": {"title": "Is Future", "type": "boolean"}, "member_data": {"$ref": "#/components/schemas/TeamMemberSummarySchema"}, "has_holidays": {"title": "Has Holidays", "type": "boolean"}, "max_bookings": {"title": "Max Bookings", "type": "integer"}, "booking_indices": {"items": {"type": "integer"}, "title": "Booking Indices", "type": "array"}, "total_hours": {"title": "Total Hours", "type": "number"}, "total_available": {"title": "Total Available", "type": "number"}, "utilization_percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Utilization Percentage", "type": "string"}}, "required": ["member_id", "member_name", "period", "start_date", "end_date", "week_dates", "week_label", "week_number", "is_current", "is_past", "is_future", "member_data", "has_holidays", "max_bookings", "booking_indices", "total_hours", "total_available", "utilization_percentage"], "title": "MemberLoadDetailSchema", "type": "object"}, "TeamMemberSummarySchema": {"description": "Team member with their weekly load data", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "daily_data": {"additionalProperties": {"$ref": "#/components/schemas/DayLoadDataSchema"}, "title": "Daily Data", "type": "object"}, "total_booked": {"title": "Total Booked", "type": "number"}, "total_available": {"title": "Total Available", "type": "number"}, "total_display": {"title": "Total Display", "type": "string"}, "load_percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Load Percentage", "type": "string"}}, "required": ["id", "name", "daily_data", "total_booked", "total_available", "total_display", "load_percentage"], "title": "TeamMemberSummarySchema", "type": "object"}, "ContactInvitation": {"properties": {"id": {"title": "Id", "type": "string"}, "email": {"title": "Email", "type": "string"}, "timestamp": {"format": "date-time", "title": "Timestamp", "type": "string"}}, "required": ["id", "email", "timestamp"], "title": "ContactInvitation", "type": "object"}, "OrgContact": {"properties": {"id": {"title": "Id", "type": "string"}, "first_name": {"title": "First Name", "type": "string"}, "last_name": {"title": "Last Name", "type": "string"}, "email": {"title": "Email", "type": "string"}, "phone": {"title": "Phone", "type": "string"}, "address": {"title": "Address", "type": "string"}, "job_title": {"title": "Job Title", "type": "string"}, "customer_portal_invitation": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Portal Invitation"}, "customer_portal_access": {"title": "Customer Portal Access", "type": "boolean"}}, "required": ["id", "first_name", "last_name", "email", "phone", "address", "job_title", "customer_portal_access"], "title": "OrgContact", "type": "object"}, "OrgContacts": {"properties": {"org_id": {"title": "Org Id", "type": "string"}, "contacts": {"items": {"$ref": "#/components/schemas/OrgContact"}, "title": "Contacts", "type": "array"}, "invitations": {"items": {"$ref": "#/components/schemas/ContactInvitation"}, "title": "Invitations", "type": "array"}}, "required": ["org_id", "contacts", "invitations"], "title": "OrgContacts", "type": "object"}, "InviteMemberToTenant": {"properties": {"email": {"maxLength": 100, "minLength": 6, "title": "Email", "type": "string"}}, "required": ["email"], "title": "InviteMemberToTenant", "type": "object"}, "EditMemberPreferences": {"properties": {"nickname": {"maxLength": 25, "minLength": 1, "title": "Nickname", "type": "string"}, "work_email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Email"}, "work_email_alternative": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Email address visible to customers in their portal", "title": "Work Email Alternative"}, "work_phone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Phone"}, "work_phone_alternative": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Phone number visible to customers in their portal", "title": "Work Phone Alternative"}, "territory": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Territory"}}, "required": ["nickname"], "title": "EditMemberPreferences", "type": "object"}, "EditMemberMiscPreferences": {"properties": {"preference_feed": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Preference Feed"}, "preference_ownership": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Preference Ownership"}}, "title": "EditMemberMiscPreferences", "type": "object"}, "AddContactToOrg": {"properties": {"contact_info_first_name": {"title": "Contact Info First Name", "type": "string"}, "contact_info_last_name": {"title": "Contact Info Last Name", "type": "string"}, "contact_info_email": {"title": "Contact Info Email", "type": "string"}, "contact_info_phone": {"title": "Contact Info Phone", "type": "string"}, "contact_info_address": {"title": "Contact Info Address", "type": "string"}, "contact_info_job_title": {"title": "Contact Info Job Title", "type": "string"}}, "required": ["contact_info_first_name", "contact_info_last_name", "contact_info_email", "contact_info_phone", "contact_info_address", "contact_info_job_title"], "title": "AddContactToOrg", "type": "object"}, "EditContact": {"properties": {"contact_info_first_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Contact Info First Name"}, "contact_info_last_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Contact Info Last Name"}, "contact_info_email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Contact Info Email"}, "contact_info_phone": {"title": "Contact Info Phone", "type": "string"}, "contact_info_address": {"title": "Contact Info Address", "type": "string"}, "contact_info_job_title": {"title": "Contact Info Job Title", "type": "string"}}, "required": ["contact_info_phone", "contact_info_address", "contact_info_job_title"], "title": "EditContact", "type": "object"}, "FeatureAccessSummary": {"description": "What the caller can reach in one feature, rolled up from their permissions.", "properties": {"feature": {"title": "Feature", "type": "string"}, "admin_access": {"title": "Admin Access", "type": "boolean"}, "user_access": {"title": "User Access", "type": "boolean"}, "has_all": {"title": "Has All", "type": "boolean"}, "permission_count": {"title": "Permission Count", "type": "integer"}}, "required": ["feature", "admin_access", "user_access", "has_all", "permission_count"], "title": "FeatureAccessSummary", "type": "object"}, "MyPermissionsExplain": {"description": "The caller's own access in one workspace.\n\nTwo permission lists, because they answer different questions.\n`flat_permissions` is the ceiling the caller's roles grant. Wildcards the\nowner policy adds are not in it, and a scope-narrowed credential has not\nbeen applied to it. `effective_permissions` is what the credential making\nTHIS request can actually exercise. When the second is smaller than the\nfirst, `scope_crud_types` says why.\n\nAbsent fields carry meaning: `scope_crud_types` is omitted under session\nauth, where no narrowing applies, and `is_superuser` is omitted for\neveryone who is not one.", "properties": {"is_owner": {"title": "Is Owner", "type": "boolean"}, "is_superuser": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Superuser"}, "flat_permissions": {"items": {"type": "string"}, "title": "Flat Permissions", "type": "array"}, "effective_permissions": {"items": {"type": "string"}, "title": "Effective Permissions", "type": "array"}, "scope_crud_types": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Scope Crud Types"}, "feature_summary": {"items": {"$ref": "#/components/schemas/FeatureAccessSummary"}, "title": "Feature Summary", "type": "array"}, "role_memberships": {"items": {"$ref": "#/components/schemas/RoleMembership"}, "title": "Role Memberships", "type": "array"}}, "required": ["is_owner", "flat_permissions", "effective_permissions", "feature_summary", "role_memberships"], "title": "MyPermissionsExplain", "type": "object"}, "RoleMembership": {"description": "A role the caller holds. Never anyone else's membership.", "properties": {"role_id": {"title": "Role Id", "type": "string"}, "role_name": {"title": "Role Name", "type": "string"}}, "required": ["role_id", "role_name"], "title": "RoleMembership", "type": "object"}, "TenantRole": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "active": {"title": "Active", "type": "integer"}, "default": {"type": "integer", "title": "Default"}}, "required": ["id", "name", "description", "active", "default"], "title": "TenantRole", "type": "object"}, "TenantRoles": {"properties": {"roles": {"items": {"$ref": "#/components/schemas/TenantRole"}, "title": "Roles", "type": "array"}}, "required": ["roles"], "title": "TenantRoles", "type": "object"}, "TeamMembersRole": {"properties": {"role": {"title": "Role", "type": "string"}, "members": {"items": {"$ref": "#/components/schemas/TeamMember"}, "title": "Members", "type": "array"}}, "required": ["role", "members"], "title": "TeamMembersRole", "type": "object"}, "Permission": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "crud_type": {"title": "Crud Type", "type": "string"}}, "required": ["id", "name", "description", "crud_type"], "title": "Permission", "type": "object"}, "PermissionGroup": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "permissions": {"items": {"$ref": "#/components/schemas/Permission"}, "title": "Permissions", "type": "array"}}, "required": ["id", "name", "description", "permissions"], "title": "PermissionGroup", "type": "object"}, "Permissions": {"properties": {"role": {"title": "Role", "type": "string"}, "permissions": {"items": {"$ref": "#/components/schemas/PermissionGroup"}, "title": "Permissions", "type": "array"}}, "required": ["role", "permissions"], "title": "Permissions", "type": "object"}, "AddPermissionToRole": {"properties": {"role": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Role", "type": "string"}, "permission": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Permission", "type": "string"}}, "required": ["role", "permission"], "title": "AddPermissionToRole", "type": "object"}, "AddMemberToRole": {"properties": {"role": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Role", "type": "string"}, "team": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Team", "type": "string"}}, "required": ["role", "team"], "title": "AddMemberToRole", "type": "object"}, "AddRole": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Active"}}, "required": ["name", "description"], "title": "AddRole", "type": "object"}, "EditRole": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "required": ["name", "description"], "title": "EditRole", "type": "object"}, "Feed": {"properties": {"events": {"items": {"$ref": "#/components/schemas/FeedEvent"}, "title": "Events", "type": "array"}, "reactions": {"additionalProperties": true, "title": "Reactions", "type": "object"}, "per_page": {"title": "Per Page", "type": "integer"}, "next_page": {"title": "Next Page", "type": "integer"}}, "required": ["events", "reactions", "per_page", "next_page"], "title": "Feed", "type": "object"}, "FeedEvent": {"properties": {"id": {"title": "Id", "type": "string"}, "is_audit": {"title": "Is Audit", "type": "boolean"}, "timestamp": {"format": "date-time", "title": "Timestamp", "type": "string"}, "content": {"$ref": "#/components/schemas/FeedEventContent"}, "possible_reactions": {"additionalProperties": true, "title": "Possible Reactions", "type": "object"}}, "required": ["id", "is_audit", "timestamp", "content", "possible_reactions"], "title": "FeedEvent", "type": "object"}, "FeedEventContent": {"properties": {"source": {"title": "Source", "type": "string"}, "author_id": {"title": "Author Id", "type": "string"}, "author_name": {"title": "Author Name", "type": "string"}, "author_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Author Avatar Url"}, "author_email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Author Email"}, "author_phone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Author Phone"}, "is_system": {"default": false, "title": "Is System", "type": "boolean"}, "tenant_logo_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Tenant Logo Url"}, "timestamp": {"format": "date-time", "title": "Timestamp", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"title": "Description", "type": "string"}}, "required": ["source", "author_id", "author_name", "timestamp", "title", "description"], "title": "FeedEventContent", "type": "object"}, "TenantTag": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "color": {"title": "Color", "type": "string"}}, "required": ["id", "name", "color"], "title": "TenantTag", "type": "object"}, "TenantTags": {"properties": {"tags": {"items": {"$ref": "#/components/schemas/TenantTag"}, "title": "Tags", "type": "array"}}, "required": ["tags"], "title": "TenantTags", "type": "object"}, "OutputTagDetails": {"properties": {"tag_id": {"title": "Tag Id", "type": "string"}, "tag_name": {"title": "Tag Name", "type": "string"}, "tag_color": {"title": "Tag Color", "type": "string"}, "entity_stats": {"items": {"$ref": "#/components/schemas/TaggedEntityStats"}, "title": "Entity Stats", "type": "array"}, "total_usage_count": {"title": "Total Usage Count", "type": "integer"}}, "required": ["tag_id", "tag_name", "tag_color", "entity_stats", "total_usage_count"], "title": "OutputTagDetails", "type": "object"}, "TaggedEntityStats": {"properties": {"entity_name": {"title": "Entity Name", "type": "string"}, "tagged_count": {"title": "Tagged Count", "type": "integer"}, "total_count": {"title": "Total Count", "type": "integer"}, "percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percentage", "type": "string"}}, "required": ["entity_name", "tagged_count", "total_count", "percentage"], "title": "TaggedEntityStats", "type": "object"}, "AddTag": {"properties": {"name": {"maxLength": 25, "minLength": 2, "title": "Name", "type": "string"}, "color": {"maxLength": 7, "minLength": 7, "title": "Color", "type": "string"}}, "required": ["name", "color"], "title": "AddTag", "type": "object"}, "EditTag": {"properties": {"name": {"maxLength": 25, "minLength": 2, "title": "Name", "type": "string"}, "color": {"maxLength": 7, "minLength": 7, "title": "Color", "type": "string"}}, "required": ["name", "color"], "title": "EditTag", "type": "object"}, "OutputMemberTags": {"properties": {"member": {"title": "Member", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["member", "tags", "unassigned_tags"], "title": "OutputMemberTags", "type": "object"}, "OutputTag": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "color": {"title": "Color", "type": "string"}}, "required": ["id", "name", "color"], "title": "OutputTag", "type": "object"}, "OutputRoleTags": {"properties": {"role": {"title": "Role", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["role", "tags", "unassigned_tags"], "title": "OutputRoleTags", "type": "object"}, "OutputOrgTags": {"properties": {"org": {"title": "Org", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["org", "tags", "unassigned_tags"], "title": "OutputOrgTags", "type": "object"}, "OutputResourceTags": {"properties": {"resource": {"title": "Resource", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["resource", "tags", "unassigned_tags"], "title": "OutputResourceTags", "type": "object"}, "OutputProposalTags": {"properties": {"proposal": {"title": "Proposal", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["proposal", "tags", "unassigned_tags"], "title": "OutputProposalTags", "type": "object"}, "OutputWorkItemTemplateTags": {"properties": {"work_item_template": {"title": "Work Item Template", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["work_item_template", "tags", "unassigned_tags"], "title": "OutputWorkItemTemplateTags", "type": "object"}, "OutputWorkItemTags": {"properties": {"work_item": {"title": "Work Item", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}, "has_project": {"title": "Has Project", "type": "boolean"}}, "required": ["work_item", "tags", "unassigned_tags", "has_project"], "title": "OutputWorkItemTags", "type": "object"}, "OutputOperationalWorkItemTags": {"properties": {"operational_work_item": {"title": "Operational Work Item", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["operational_work_item", "tags", "unassigned_tags"], "title": "OutputOperationalWorkItemTags", "type": "object"}, "OutputDocumentTags": {"properties": {"document": {"title": "Document", "type": "string"}, "tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["document", "tags", "unassigned_tags"], "title": "OutputDocumentTags", "type": "object"}, "TenantLabel": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}}, "required": ["id", "name"], "title": "TenantLabel", "type": "object"}, "TenantLabels": {"properties": {"labels": {"items": {"$ref": "#/components/schemas/TenantLabel"}, "title": "Labels", "type": "array"}}, "required": ["labels"], "title": "TenantLabels", "type": "object"}, "AddLabel": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "label_type": {"default": "text", "enum": ["text", "integer", "decimal", "date"], "title": "Label Type", "type": "string"}}, "required": ["name"], "title": "AddLabel", "type": "object"}, "EditLabel": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}}, "required": ["name"], "title": "EditLabel", "type": "object"}, "LabeledEntityStats": {"properties": {"entity_name": {"title": "Entity Name", "type": "string"}, "labeled_count": {"title": "Labeled Count", "type": "integer"}, "total_count": {"title": "Total Count", "type": "integer"}, "percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percentage", "type": "string"}}, "required": ["entity_name", "labeled_count", "total_count", "percentage"], "title": "LabeledEntityStats", "type": "object"}, "OutputLabelDetails": {"properties": {"label_id": {"title": "Label Id", "type": "string"}, "label_name": {"title": "Label Name", "type": "string"}, "security": {"title": "Security", "type": "boolean"}, "entity_stats": {"items": {"$ref": "#/components/schemas/LabeledEntityStats"}, "title": "Entity Stats", "type": "array"}, "total_usage_count": {"title": "Total Usage Count", "type": "integer"}}, "required": ["label_id", "label_name", "security", "entity_stats", "total_usage_count"], "title": "OutputLabelDetails", "type": "object"}, "LabelValueStats": {"properties": {"value": {"title": "Value", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percentage", "type": "string"}}, "required": ["value", "count", "percentage"], "title": "LabelValueStats", "type": "object"}, "OutputLabelCardinality": {"properties": {"label_id": {"title": "Label Id", "type": "string"}, "label_name": {"title": "Label Name", "type": "string"}, "total_entities": {"title": "Total Entities", "type": "integer"}, "cardinality": {"title": "Cardinality", "type": "integer"}, "value_distribution": {"items": {"$ref": "#/components/schemas/LabelValueStats"}, "title": "Value Distribution", "type": "array"}}, "required": ["label_id", "label_name", "total_entities", "cardinality", "value_distribution"], "title": "OutputLabelCardinality", "type": "object"}, "OutputLabel": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "value": {"title": "Value", "type": "string"}, "type": {"title": "Type", "type": "string"}}, "required": ["id", "name", "value", "type"], "title": "OutputLabel", "type": "object"}, "OutputMemberLabels": {"properties": {"member": {"title": "Member", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["member", "labels"], "title": "OutputMemberLabels", "type": "object"}, "AddLabelToMember": {"properties": {"team": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Team", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["team", "label"], "title": "AddLabelToMember", "type": "object"}, "OutputRoleLabels": {"properties": {"role": {"title": "Role", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["role", "labels"], "title": "OutputRoleLabels", "type": "object"}, "AddLabelToRole": {"properties": {"role": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Role", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["role", "label"], "title": "AddLabelToRole", "type": "object"}, "OutputOrgLabels": {"properties": {"org": {"title": "Org", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["org", "labels"], "title": "OutputOrgLabels", "type": "object"}, "AddLabelToOrg": {"properties": {"org": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Org", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["org", "label"], "title": "AddLabelToOrg", "type": "object"}, "OutputResourceLabels": {"properties": {"resource": {"title": "Resource", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["resource", "labels"], "title": "OutputResourceLabels", "type": "object"}, "AddLabelToResource": {"properties": {"resource": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Resource", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["resource", "label"], "title": "AddLabelToResource", "type": "object"}, "OutputProposalLabels": {"properties": {"proposal": {"title": "Proposal", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["proposal", "labels"], "title": "OutputProposalLabels", "type": "object"}, "AddLabelToProposal": {"properties": {"proposal": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Proposal", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["proposal", "label"], "title": "AddLabelToProposal", "type": "object"}, "OutputWorkItemLabels": {"properties": {"work_item": {"title": "Work Item", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}, "has_project": {"title": "Has Project", "type": "boolean"}}, "required": ["work_item", "labels", "has_project"], "title": "OutputWorkItemLabels", "type": "object"}, "AddLabelToWorkItem": {"properties": {"work_item": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Work Item", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["work_item", "label"], "title": "AddLabelToWorkItem", "type": "object"}, "AddLabelToOperationalWorkItem": {"properties": {"operational_work_item": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Operational Work Item", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["operational_work_item", "label"], "title": "AddLabelToOperationalWorkItem", "type": "object"}, "OutputWorkItemTemplateLabels": {"properties": {"work_item_template": {"title": "Work Item Template", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["work_item_template", "labels"], "title": "OutputWorkItemTemplateLabels", "type": "object"}, "AddLabelToWorkItemTemplate": {"properties": {"work_template": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Work Template", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["work_template", "label"], "title": "AddLabelToWorkItemTemplate", "type": "object"}, "OutputOperationalWorkItemLabels": {"properties": {"operational_work_item": {"title": "Operational Work Item", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["operational_work_item", "labels"], "title": "OutputOperationalWorkItemLabels", "type": "object"}, "OutputDocumentLabels": {"properties": {"document": {"title": "Document", "type": "string"}, "labels": {"items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["document", "labels"], "title": "OutputDocumentLabels", "type": "object"}, "AddLabelToDocument": {"properties": {"document": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Document", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["document", "label"], "title": "AddLabelToDocument", "type": "object"}, "TenantAutomation": {"description": "A single automation rule in the list.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "trigger_event": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Trigger Event"}, "trigger_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Trigger Label"}, "filter_count": {"default": 0, "title": "Filter Count", "type": "integer"}, "actions": {"default": [], "items": {"$ref": "#/components/schemas/TenantAutomationAction"}, "title": "Actions", "type": "array"}, "is_active": {"default": true, "title": "Is Active", "type": "boolean"}, "source": {"default": "ui", "title": "Source", "type": "string"}, "source_webhook_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Source Webhook Name"}}, "required": ["id", "name"], "title": "TenantAutomation", "type": "object"}, "TenantAutomationAction": {"description": "An action within a rule, as displayed in the list.", "properties": {"action_type": {"title": "Action Type", "type": "string"}, "action_name": {"title": "Action Name", "type": "string"}, "name": {"default": "", "title": "Name", "type": "string"}, "condition": {"default": [], "items": {}, "title": "Condition", "type": "array"}, "stop_on_error": {"default": false, "title": "Stop On Error", "type": "boolean"}, "fan_out": {"default": false, "title": "Fan Out", "type": "boolean"}}, "required": ["action_type", "action_name"], "title": "TenantAutomationAction", "type": "object"}, "TenantAutomations": {"description": "Output: list of automation rules.", "properties": {"automations": {"items": {"$ref": "#/components/schemas/TenantAutomation"}, "title": "Automations", "type": "array"}}, "required": ["automations"], "title": "TenantAutomations", "type": "object"}, "AutomationEvents": {"description": "Output: list of triggerable events.", "properties": {"events": {"items": {"items": {}, "type": "array"}, "title": "Events", "type": "array"}}, "required": ["events"], "title": "AutomationEvents", "type": "object"}, "AutomationAction": {"description": "An available action as returned by the automation_actions endpoint.", "properties": {"action_id": {"title": "Action Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "category": {"title": "Category", "type": "string"}, "fields": {"default": "[]", "title": "Fields", "type": "string"}, "form_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Form Url"}, "returns_list": {"default": false, "title": "Returns List", "type": "boolean"}, "output_fields": {"default": "{}", "title": "Output Fields", "type": "string"}, "summary_fields": {"default": "{}", "title": "Summary Fields", "type": "string"}}, "required": ["action_id", "name", "category"], "title": "AutomationAction", "type": "object"}, "AutomationActionsResponse": {"description": "Output: list of available actions from the registry.", "properties": {"actions": {"items": {"$ref": "#/components/schemas/AutomationAction"}, "title": "Actions", "type": "array"}, "template_vars": {"default": [], "items": {"$ref": "#/components/schemas/TemplateVariable"}, "title": "Template Vars", "type": "array"}}, "required": ["actions"], "title": "AutomationActionsResponse", "type": "object"}, "TemplateVariable": {"description": "A variable available for {{ }} template expressions.", "properties": {"name": {"title": "Name", "type": "string"}, "label": {"title": "Label", "type": "string"}, "type": {"default": "string", "title": "Type", "type": "string"}}, "required": ["name", "label"], "title": "TemplateVariable", "type": "object"}, "AutomationFiltersResponse": {"description": "Output: available filters and operators for a trigger.", "properties": {"filters": {"additionalProperties": true, "title": "Filters", "type": "object"}, "operators": {"additionalProperties": true, "title": "Operators", "type": "object"}}, "required": ["filters", "operators"], "title": "AutomationFiltersResponse", "type": "object"}, "AutomationEventFilters": {"description": "Input: which trigger event to get filters for.", "properties": {"action": {"title": "Action", "type": "string"}}, "required": ["action"], "title": "AutomationEventFilters", "type": "object"}, "AutomationConditionFiltersResponse": {"description": "Output: available condition fields and operators for an action.", "properties": {"filters": {"additionalProperties": true, "title": "Filters", "type": "object"}, "operators": {"additionalProperties": true, "title": "Operators", "type": "object"}, "prefix": {"default": "", "title": "Prefix", "type": "string"}, "action_idx": {"default": 0, "title": "Action Idx", "type": "integer"}}, "required": ["filters", "operators"], "title": "AutomationConditionFiltersResponse", "type": "object"}, "AutomationActionConditionInput": {"description": "Input: get condition fields for an action in the pipeline.", "properties": {"trigger_event": {"title": "Trigger Event", "type": "string"}, "preceding_actions": {"default": [], "items": {}, "title": "Preceding Actions", "type": "array"}, "action_idx": {"default": 0, "title": "Action Idx", "type": "integer"}}, "required": ["trigger_event"], "title": "AutomationActionConditionInput", "type": "object"}, "AutomationActionInput": {"description": "An action definition within a rule.", "properties": {"action_type": {"title": "Action Type", "type": "string"}, "action_config": {"additionalProperties": true, "title": "Action Config", "type": "object"}, "name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Name"}, "condition": {"default": [], "items": {}, "title": "Condition", "type": "array"}, "stop_on_error": {"default": false, "title": "Stop On Error", "type": "boolean"}, "fan_out": {"default": false, "title": "Fan Out", "type": "boolean"}}, "required": ["action_type", "action_config"], "title": "AutomationActionInput", "type": "object"}, "AutomationFilter": {"description": "A single filter condition in a rule.", "properties": {"id": {"title": "Id", "type": "integer"}, "filter": {"title": "Filter", "type": "string"}, "filter_label": {"title": "Filter Label", "type": "string"}, "operator": {"title": "Operator", "type": "string"}, "value": {"title": "Value", "type": "string"}}, "required": ["id", "filter", "filter_label", "operator", "value"], "title": "AutomationFilter", "type": "object"}, "AutomationRuleInfo": {"description": "The name and active state of a rule.", "properties": {"name": {"title": "Name", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Active"}}, "required": ["name"], "title": "AutomationRuleInfo", "type": "object"}, "NewAutomation": {"description": "Input: create a new automation rule.", "properties": {"automation": {"$ref": "#/components/schemas/NewAutomationData"}}, "required": ["automation"], "title": "NewAutomation", "type": "object"}, "NewAutomationData": {"description": "The full payload for creating a new automation rule.", "properties": {"event": {"title": "Event", "type": "string"}, "filters": {"items": {"$ref": "#/components/schemas/AutomationFilter"}, "title": "Filters", "type": "array"}, "actions": {"items": {"$ref": "#/components/schemas/AutomationActionInput"}, "title": "Actions", "type": "array"}, "automation": {"$ref": "#/components/schemas/AutomationRuleInfo"}}, "required": ["event", "filters", "actions", "automation"], "title": "NewAutomationData", "type": "object"}, "EditAutomation": {"description": "Input: update an existing automation rule.", "properties": {"name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Name"}, "trigger_event": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Trigger Event"}, "filters": {"anyOf": [{"items": {"$ref": "#/components/schemas/AutomationFilter"}, "type": "array"}, {"type": "null"}], "title": "Filters"}, "actions": {"anyOf": [{"items": {"$ref": "#/components/schemas/AutomationActionInput"}, "type": "array"}, {"type": "null"}], "title": "Actions"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "title": "EditAutomation", "type": "object"}, "AutomationActionLogEntry": {"description": "A single action execution within an automation run.", "properties": {"action_type": {"title": "Action Type", "type": "string"}, "status": {"default": "failure", "title": "Status", "type": "string"}, "error_message": {"default": "", "title": "Error Message", "type": "string"}, "output": {"anyOf": [{"additionalProperties": true, "type": "object"}, {"type": "null"}], "title": "Output"}, "fan_out_index": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Fan Out Index"}}, "required": ["action_type"], "title": "AutomationActionLogEntry", "type": "object"}, "AutomationExecutionEntry": {"description": "A single execution log entry.", "properties": {"id": {"title": "Id", "type": "string"}, "event_id": {"title": "Event Id", "type": "string"}, "event_type": {"title": "Event Type", "type": "string"}, "action_count": {"default": 0, "title": "Action Count", "type": "integer"}, "success_count": {"default": 0, "title": "Success Count", "type": "integer"}, "failure_count": {"default": 0, "title": "Failure Count", "type": "integer"}, "skipped_count": {"default": 0, "title": "Skipped Count", "type": "integer"}, "duration_ms": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Ms"}, "execution_context": {"anyOf": [{"additionalProperties": true, "type": "object"}, {"type": "null"}], "title": "Execution Context"}, "fan_out_count": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Fan Out Count"}, "created_at": {"title": "Created At", "type": "string"}, "action_logs": {"default": [], "items": {"$ref": "#/components/schemas/AutomationActionLogEntry"}, "title": "Action Logs", "type": "array"}}, "required": ["id", "event_id", "event_type", "created_at"], "title": "AutomationExecutionEntry", "type": "object"}, "AutomationExecutions": {"description": "Output: execution log list for one automation rule.", "properties": {"executions": {"items": {"$ref": "#/components/schemas/AutomationExecutionEntry"}, "title": "Executions", "type": "array"}, "total": {"default": 0, "title": "Total", "type": "integer"}}, "required": ["executions"], "title": "AutomationExecutions", "type": "object"}, "OutputActionOutputFields": {"description": "Output: available output fields for an action type.", "properties": {"fields": {"additionalProperties": true, "title": "Fields", "type": "object"}}, "required": ["fields"], "title": "OutputActionOutputFields", "type": "object"}, "ReorderActions": {"description": "Input: reorder actions within a rule.", "properties": {"actions": {"items": {"$ref": "#/components/schemas/ReorderActionsItem"}, "title": "Actions", "type": "array"}}, "required": ["actions"], "title": "ReorderActions", "type": "object"}, "ReorderActionsItem": {"description": "A single action reorder instruction.", "properties": {"action_id": {"title": "Action Id", "type": "string"}, "order": {"title": "Order", "type": "integer"}}, "required": ["action_id", "order"], "title": "ReorderActionsItem", "type": "object"}, "TenantOrg": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "first_letter": {"title": "First Letter", "type": "string"}, "manager_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Manager Name"}, "manager_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Manager Avatar Url"}, "managed_by_me": {"default": false, "title": "Managed By Me", "type": "boolean"}, "tags": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Tags", "type": "array"}}, "required": ["id", "name", "first_letter"], "title": "TenantOrg", "type": "object"}, "TenantOrgs": {"properties": {"orgs": {"items": {"$ref": "#/components/schemas/TenantOrg"}, "title": "Orgs", "type": "array"}}, "required": ["orgs"], "title": "TenantOrgs", "type": "object"}, "SubtenantInfo": {"properties": {"name": {"title": "Name", "type": "string"}, "timezone": {"title": "Timezone", "type": "string"}, "default_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Currency"}, "country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Country"}, "manager_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Manager Name"}, "local_time": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Local Time"}}, "required": ["name", "timezone"], "title": "SubtenantInfo", "type": "object"}, "SubtenantLegalInfo": {"properties": {"legal_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Name"}, "legal_country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country"}, "legal_country_registration_id_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Registration Id Name"}, "legal_country_registration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Registration Id"}, "legal_country_tax_id_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 1 Name"}, "legal_country_tax_id_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 1"}, "legal_country_tax_id_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 2 Name"}, "legal_country_tax_id_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 2"}, "legal_country_tax_id_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 3 Name"}, "legal_country_tax_id_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 3"}, "legal_world_tax_id_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 1 Name"}, "legal_world_tax_id_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 1"}, "legal_world_tax_id_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 2 Name"}, "legal_world_tax_id_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 2"}, "legal_world_tax_id_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 3 Name"}, "legal_world_tax_id_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 3"}, "legal_other_identifier_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 1 Name"}, "legal_other_identifier_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 1"}, "legal_other_identifier_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 2 Name"}, "legal_other_identifier_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 2"}, "legal_other_identifier_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 3 Name"}, "legal_other_identifier_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 3"}, "legal_region": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Region"}, "legal_city": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal City"}, "legal_address_line_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Address Line 1"}, "legal_address_line_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Address Line 2"}, "legal_postal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Postal Code"}}, "title": "SubtenantLegalInfo", "type": "object"}, "OutputCsvImportCell": {"properties": {"column": {"title": "Column", "type": "string"}, "message": {"default": "", "title": "Message", "type": "string"}, "before": {"default": "", "title": "Before", "type": "string"}, "after": {"default": "", "title": "After", "type": "string"}}, "required": ["column"], "title": "OutputCsvImportCell", "type": "object"}, "OutputCsvImportPreview": {"description": "What a CSV import would do, row by row, before anything is written.", "properties": {"recognised_columns": {"items": {"type": "string"}, "title": "Recognised Columns", "type": "array"}, "ignored_columns": {"items": {"type": "string"}, "title": "Ignored Columns", "type": "array"}, "row_count": {"title": "Row Count", "type": "integer"}, "create_count": {"title": "Create Count", "type": "integer"}, "update_count": {"title": "Update Count", "type": "integer"}, "unchanged_count": {"title": "Unchanged Count", "type": "integer"}, "error_count": {"title": "Error Count", "type": "integer"}, "notes": {"default": [], "items": {"type": "string"}, "title": "Notes", "type": "array"}, "new_item_names": {"items": {"type": "string"}, "title": "New Item Names", "type": "array"}, "more_new_items": {"title": "More New Items", "type": "integer"}, "upload_token": {"title": "Upload Token", "type": "string"}, "rows": {"items": {"$ref": "#/components/schemas/OutputCsvImportRow"}, "title": "Rows", "type": "array"}}, "required": ["recognised_columns", "ignored_columns", "row_count", "create_count", "update_count", "unchanged_count", "error_count", "new_item_names", "more_new_items", "upload_token", "rows"], "title": "OutputCsvImportPreview", "type": "object"}, "OutputCsvImportRow": {"properties": {"row_number": {"title": "Row Number", "type": "integer"}, "name": {"title": "Name", "type": "string"}, "key": {"default": "", "title": "Key", "type": "string"}, "action": {"enum": ["create", "update", "unchanged", "error"], "title": "Action", "type": "string"}, "changes": {"default": [], "items": {"$ref": "#/components/schemas/OutputCsvImportCell"}, "title": "Changes", "type": "array"}, "errors": {"default": [], "items": {"$ref": "#/components/schemas/OutputCsvImportCell"}, "title": "Errors", "type": "array"}}, "required": ["row_number", "name", "action"], "title": "OutputCsvImportRow", "type": "object"}, "OutputCsvImportSummary": {"properties": {"created_count": {"title": "Created Count", "type": "integer"}, "updated_count": {"title": "Updated Count", "type": "integer"}, "unchanged_count": {"title": "Unchanged Count", "type": "integer"}, "error_count": {"title": "Error Count", "type": "integer"}, "rows": {"items": {"$ref": "#/components/schemas/OutputCsvImportRow"}, "title": "Rows", "type": "array"}}, "required": ["created_count", "updated_count", "unchanged_count", "error_count", "rows"], "title": "OutputCsvImportSummary", "type": "object"}, "AddSubtenant": {"properties": {"parent_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Parent Id", "type": "string"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "timezone": {"title": "Timezone", "type": "string"}, "default_currency": {"maxLength": 3, "minLength": 0, "title": "Default Currency", "type": "string"}, "country": {"maxLength": 3, "minLength": 2, "title": "Country", "type": "string"}, "manager": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Manager", "type": "string"}, "domains": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Domains"}}, "required": ["parent_id", "name", "timezone", "default_currency", "country", "manager"], "title": "AddSubtenant", "type": "object"}, "EditSubtenant": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "timezone": {"title": "Timezone", "type": "string"}, "default_currency": {"maxLength": 3, "minLength": 0, "title": "Default Currency", "type": "string"}, "country": {"maxLength": 3, "minLength": 2, "title": "Country", "type": "string"}, "manager": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Manager", "type": "string"}, "domains": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Domains"}, "portal_ordering_enabled": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Portal Ordering Enabled"}, "portal_quote_requests_enabled": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Portal Quote Requests Enabled"}}, "required": ["name", "timezone", "default_currency", "country", "manager"], "title": "EditSubtenant", "type": "object"}, "EditSubtenantLegalInfo": {"description": "Schema for editing subtenant (organization) legal info", "properties": {"legal_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Name"}, "legal_country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country"}, "legal_country_registration_id_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Registration Id Name"}, "legal_country_registration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Registration Id"}, "legal_country_tax_id_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 1 Name"}, "legal_country_tax_id_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 1"}, "legal_country_tax_id_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 2 Name"}, "legal_country_tax_id_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 2"}, "legal_country_tax_id_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 3 Name"}, "legal_country_tax_id_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Country Tax Id 3"}, "legal_world_tax_id_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 1 Name"}, "legal_world_tax_id_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 1"}, "legal_world_tax_id_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 2 Name"}, "legal_world_tax_id_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 2"}, "legal_world_tax_id_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 3 Name"}, "legal_world_tax_id_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal World Tax Id 3"}, "legal_other_identifier_1_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 1 Name"}, "legal_other_identifier_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 1"}, "legal_other_identifier_2_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 2 Name"}, "legal_other_identifier_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 2"}, "legal_other_identifier_3_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 3 Name"}, "legal_other_identifier_3": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Other Identifier 3"}, "legal_region": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Region"}, "legal_city": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal City"}, "legal_address_line_1": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Address Line 1"}, "legal_address_line_2": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Address Line 2"}, "legal_postal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Legal Postal Code"}, "tenant": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Tenant", "type": "string"}}, "required": ["tenant"], "title": "EditSubtenantLegalInfo", "type": "object"}, "AvailabilityHours": {"properties": {"external_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "External Id"}, "start_time": {"anyOf": [{"format": "time", "type": "string"}, {"type": "null"}], "title": "Start Time"}, "end_time": {"anyOf": [{"format": "time", "type": "string"}, {"type": "null"}], "title": "End Time"}, "member_tz_start_time": {"anyOf": [{"format": "time", "type": "string"}, {"type": "null"}], "title": "Member Tz Start Time"}, "member_tz_end_time": {"anyOf": [{"format": "time", "type": "string"}, {"type": "null"}], "title": "Member Tz End Time"}, "viewer_tz_start_time": {"anyOf": [{"format": "time", "type": "string"}, {"type": "null"}], "title": "Viewer Tz Start Time"}, "viewer_tz_end_time": {"anyOf": [{"format": "time", "type": "string"}, {"type": "null"}], "title": "Viewer Tz End Time"}, "hour_range": {"default": [], "items": {"type": "integer"}, "title": "Hour Range", "type": "array"}, "hour_range_member_tz": {"default": [], "items": {"type": "integer"}, "title": "Hour Range Member Tz", "type": "array"}, "hour_range_viewer_tz": {"default": [], "items": {"type": "integer"}, "title": "Hour Range Viewer Tz", "type": "array"}, "total": {"default": 0, "title": "Total", "type": "integer"}}, "title": "AvailabilityHours", "type": "object"}, "DailyAvailability": {"properties": {"hours": {"$ref": "#/components/schemas/AvailabilityHours"}}, "required": ["hours"], "title": "DailyAvailability", "type": "object"}, "MemberAvailability": {"properties": {"member": {"title": "Member", "type": "string"}, "member_timezone": {"title": "Member Timezone", "type": "string"}, "days": {"additionalProperties": {"$ref": "#/components/schemas/DailyAvailability"}, "title": "Days", "type": "object"}}, "required": ["member", "member_timezone", "days"], "title": "MemberAvailability", "type": "object"}, "ResourceAvailability": {"properties": {"resource": {"title": "Resource", "type": "string"}, "resource_timezone": {"title": "Resource Timezone", "type": "string"}, "days": {"additionalProperties": {"$ref": "#/components/schemas/DailyAvailability"}, "title": "Days", "type": "object"}}, "required": ["resource", "resource_timezone", "days"], "title": "ResourceAvailability", "type": "object"}, "AddAvailability": {"properties": {"tenant": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Tenant", "type": "string"}, "day_of_week": {"maximum": 6, "minimum": 0, "title": "Day Of Week", "type": "integer"}, "start_time": {"maximum": 23, "minimum": 0, "title": "Start Time", "type": "integer"}, "end_time": {"maximum": 23, "minimum": 0, "title": "End Time", "type": "integer"}}, "required": ["tenant", "day_of_week", "start_time", "end_time"], "title": "AddAvailability", "type": "object"}, "TenantWBSConfiguration": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "active": {"title": "Active", "type": "boolean"}, "description": {"title": "Description", "type": "string"}, "rules": {"title": "Rules", "type": "integer"}, "default_for_new_projects": {"title": "Default For New Projects", "type": "boolean"}}, "required": ["id", "name", "active", "description", "rules", "default_for_new_projects"], "title": "TenantWBSConfiguration", "type": "object"}, "TenantWBSConfigurations": {"properties": {"wbsconfigurations": {"items": {"$ref": "#/components/schemas/TenantWBSConfiguration"}, "title": "Wbsconfigurations", "type": "array"}, "work_item_types": {"anyOf": [{"items": {"maxItems": 2, "minItems": 2, "prefixItems": [{"type": "string"}, {"type": "string"}], "type": "array"}, "type": "array"}, {"type": "null"}], "title": "Work Item Types"}}, "required": ["wbsconfigurations"], "title": "TenantWBSConfigurations", "type": "object"}, "AddWBSConfiguration": {"properties": {"name": {"maxLength": 50, "minLength": 2, "title": "Name", "type": "string"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Active"}, "description": {"default": "", "title": "Description", "type": "string"}, "terminology_deliverable": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Deliverable"}, "terminology_activity": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Activity"}, "terminology_work_package": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Work Package"}, "terminology_task": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Task"}, "terminology_milestone": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Milestone"}, "terminology_stage": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Stage"}, "terminology_phase": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Phase"}}, "required": ["name"], "title": "AddWBSConfiguration", "type": "object"}, "EditWBSConfiguration": {"properties": {"name": {"maxLength": 50, "minLength": 2, "title": "Name", "type": "string"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Active"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "default_for_new_projects": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Default For New Projects"}, "terminology_deliverable": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Deliverable"}, "terminology_activity": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Activity"}, "terminology_work_package": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Work Package"}, "terminology_task": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Task"}, "terminology_milestone": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Milestone"}, "terminology_stage": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Stage"}, "terminology_phase": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Terminology Phase"}}, "required": ["name"], "title": "EditWBSConfiguration", "type": "object"}, "OutputWBSConfigurationRule": {"properties": {"id": {"title": "Id", "type": "string"}, "parent_type": {"title": "Parent Type", "type": "string"}, "parent_scheduling": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Scheduling"}, "child_type": {"title": "Child Type", "type": "string"}, "child_scheduling": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Child Scheduling"}, "can_delete": {"title": "Can Delete", "type": "boolean"}, "blocking_templates": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Blocking Templates"}}, "required": ["id", "parent_type", "child_type", "can_delete"], "title": "OutputWBSConfigurationRule", "type": "object"}, "OutputWBSConfigurationRules": {"properties": {"wbs_configuration": {"title": "Wbs Configuration", "type": "string"}, "rules": {"items": {"$ref": "#/components/schemas/OutputWBSConfigurationRule"}, "title": "Rules", "type": "array"}, "has_root_rule": {"title": "Has Root Rule", "type": "boolean"}}, "required": ["wbs_configuration", "rules", "has_root_rule"], "title": "OutputWBSConfigurationRules", "type": "object"}, "WBSConfigurationTemplates": {"description": "Root work item templates associated with a WBS Configuration", "properties": {"wbs_configuration_id": {"title": "Wbs Configuration Id", "type": "string"}, "wbs_configuration_name": {"title": "Wbs Configuration Name", "type": "string"}, "work_templates": {"items": {"$ref": "#/components/schemas/WorkTemplate"}, "title": "Work Templates", "type": "array"}}, "required": ["wbs_configuration_id", "wbs_configuration_name", "work_templates"], "title": "WBSConfigurationTemplates", "type": "object"}, "WorkTemplate": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "work_item_type_id": {"title": "Work Item Type Id", "type": "string"}, "work_item_type_name": {"title": "Work Item Type Name", "type": "string"}, "work_item_type_scheduling_behaviour": {"title": "Work Item Type Scheduling Behaviour", "type": "string"}, "wbsconfiguration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbsconfiguration Id"}, "wbsconfiguration_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbsconfiguration Name"}, "is_active": {"title": "Is Active", "type": "boolean"}, "estimated_work_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "estimated_duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Duration Days"}, "total_hours": {"default": 0, "title": "Total Hours", "type": "integer"}, "total_days": {"default": 0, "title": "Total Days", "type": "integer"}}, "required": ["id", "name", "work_item_type_id", "work_item_type_name", "work_item_type_scheduling_behaviour", "is_active"], "title": "WorkTemplate", "type": "object"}, "AddWBSRuleToWBSConfiguration": {"properties": {"wbsconfiguration": {"title": "Wbsconfiguration", "type": "string"}, "parent_work_item_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Work Item Type"}, "child_work_item_type": {"title": "Child Work Item Type", "type": "string"}}, "required": ["wbsconfiguration", "child_work_item_type"], "title": "AddWBSRuleToWBSConfiguration", "type": "object"}, "WorkTemplates": {"properties": {"work_templates": {"items": {"$ref": "#/components/schemas/WorkTemplate"}, "title": "Work Templates", "type": "array"}}, "required": ["work_templates"], "title": "WorkTemplates", "type": "object"}, "AddWorkItemTemplate": {"properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "work_item_type_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Work Item Type Id", "type": "string"}, "wbsconfiguration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbsconfiguration Id"}, "estimated_work_hours": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "estimated_duration_days": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Estimated Duration Days"}, "is_active": {"default": false, "title": "Is Active", "type": "boolean"}, "parent_template_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Template Id"}}, "required": ["name", "work_item_type_id"], "title": "AddWorkItemTemplate", "type": "object"}, "EditWorkItemTemplate": {"properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "work_item_type_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Type Id"}, "wbsconfiguration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbsconfiguration Id"}, "estimated_work_hours": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "estimated_duration_days": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Estimated Duration Days"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "required": ["name"], "title": "EditWorkItemTemplate", "type": "object"}, "ProductWorkTemplates": {"description": "Work item templates linked to a specific catalog product", "properties": {"product_id": {"title": "Product Id", "type": "string"}, "product_name": {"title": "Product Name", "type": "string"}, "work_templates": {"items": {"$ref": "#/components/schemas/WorkTemplate"}, "title": "Work Templates", "type": "array"}}, "required": ["product_id", "product_name", "work_templates"], "title": "ProductWorkTemplates", "type": "object"}, "LinkWorkItemTemplateToProduct": {"properties": {"template_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Template Id", "type": "string"}}, "required": ["template_id"], "title": "LinkWorkItemTemplateToProduct", "type": "object"}, "LinkedProduct": {"description": "Catalog product that uses a work item template", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "product_type": {"title": "Product Type", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}}, "required": ["id", "name", "product_type", "is_active"], "title": "LinkedProduct", "type": "object"}, "TemplateLinkedProducts": {"description": "Catalog products linked to a specific work item template", "properties": {"template_id": {"title": "Template Id", "type": "string"}, "template_name": {"title": "Template Name", "type": "string"}, "linked_products": {"items": {"$ref": "#/components/schemas/LinkedProduct"}, "title": "Linked Products", "type": "array"}}, "required": ["template_id", "template_name", "linked_products"], "title": "TemplateLinkedProducts", "type": "object"}, "OutputTemplateHierarchy": {"description": "Complete template hierarchy with configuration info", "properties": {"template_id": {"title": "Template Id", "type": "string"}, "template_name": {"title": "Template Name", "type": "string"}, "wbs_configuration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbs Configuration Id"}, "wbs_configuration_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbs Configuration Name"}, "has_wbs_configuration": {"title": "Has Wbs Configuration", "type": "boolean"}, "allowed_child_types": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Allowed Child Types", "type": "array"}, "templates": {"additionalProperties": {"$ref": "#/components/schemas/TemplateNode"}, "default": {}, "title": "Templates", "type": "object"}, "total_items": {"default": 0, "title": "Total Items", "type": "integer"}}, "required": ["template_id", "template_name", "has_wbs_configuration"], "title": "OutputTemplateHierarchy", "type": "object"}, "TemplateNode": {"description": "Single template in the hierarchy", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}, "item_type_id": {"title": "Item Type Id", "type": "string"}, "item_type_name": {"title": "Item Type Name", "type": "string"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "estimated_work_hours": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Estimated Work Hours"}, "estimated_duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Duration Days"}, "children": {"additionalProperties": {"$ref": "#/components/schemas/TemplateNode"}, "default": {}, "title": "Children", "type": "object"}, "add_children": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Add Children", "type": "array"}}, "required": ["external_id", "name", "description", "hierarchy_id", "item_type_id", "item_type_name", "scheduling_behaviour", "is_active"], "title": "TemplateNode", "type": "object"}, "OutputProjectTemplates": {"description": "Work item templates available for a project, grouped by WBS configuration", "properties": {"wbs_config_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbs Config Name"}, "wbs_templates": {"items": {"additionalProperties": true, "type": "object"}, "title": "Wbs Templates", "type": "array"}, "general_templates": {"items": {"additionalProperties": true, "type": "object"}, "title": "General Templates", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}}, "required": ["wbs_templates", "general_templates", "project_id"], "title": "OutputProjectTemplates", "type": "object"}, "OutputWorkItemType": {"description": "Individual work item type details", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "active": {"title": "Active", "type": "boolean"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}, "scheduling_behaviour_display": {"title": "Scheduling Behaviour Display", "type": "string"}, "scheduling_behaviour_description": {"title": "Scheduling Behaviour Description", "type": "string"}, "wbs_configurations": {"default": [], "items": {"$ref": "#/components/schemas/WBSConfigReference"}, "title": "Wbs Configurations", "type": "array"}}, "required": ["id", "name", "description", "active", "scheduling_behaviour", "scheduling_behaviour_display", "scheduling_behaviour_description"], "title": "OutputWorkItemType", "type": "object"}, "OutputWorkItemTypes": {"description": "List of work item types", "properties": {"work_item_types": {"items": {"$ref": "#/components/schemas/OutputWorkItemType"}, "title": "Work Item Types", "type": "array"}}, "required": ["work_item_types"], "title": "OutputWorkItemTypes", "type": "object"}, "WBSConfigReference": {"description": "Reference to a WBS Configuration for linking", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}}, "required": ["id", "name"], "title": "WBSConfigReference", "type": "object"}, "AddWorkItemType": {"properties": {"name": {"maxLength": 50, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "active": {"default": false, "title": "Active", "type": "boolean"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}}, "required": ["name", "scheduling_behaviour"], "title": "AddWorkItemType", "type": "object"}, "EditWorkItemType": {"properties": {"name": {"maxLength": 50, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Active"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}}, "required": ["name", "scheduling_behaviour"], "title": "EditWorkItemType", "type": "object"}, "OutputLeadBucket": {"description": "One bucket of the worklist (overdue / today / untriaged / scheduled).", "properties": {"name": {"title": "Name", "type": "string"}, "label": {"title": "Label", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "leads": {"items": {"$ref": "#/components/schemas/OutputLeadSummary"}, "title": "Leads", "type": "array"}, "has_more": {"default": false, "title": "Has More", "type": "boolean"}, "next_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Cursor"}}, "required": ["name", "label", "count", "leads"], "title": "OutputLeadBucket", "type": "object"}, "OutputLeadBuckets": {"description": "Worklist response \u2014 four buckets stacked vertically.", "properties": {"overdue": {"$ref": "#/components/schemas/OutputLeadBucket"}, "today": {"$ref": "#/components/schemas/OutputLeadBucket"}, "untriaged": {"$ref": "#/components/schemas/OutputLeadBucket"}, "scheduled": {"$ref": "#/components/schemas/OutputLeadBucket"}, "closed_visible": {"default": false, "title": "Closed Visible", "type": "boolean"}, "total_count": {"title": "Total Count", "type": "integer"}}, "required": ["overdue", "today", "untriaged", "scheduled", "total_count"], "title": "OutputLeadBuckets", "type": "object"}, "OutputLeadSummary": {"description": "Compact representation used in list/bucket views and the worklist.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "company_name": {"default": "", "title": "Company Name", "type": "string"}, "email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Email"}, "phone": {"default": "", "title": "Phone", "type": "string"}, "job_title": {"default": "", "title": "Job Title", "type": "string"}, "status": {"title": "Status", "type": "string"}, "status_label": {"title": "Status Label", "type": "string"}, "source": {"title": "Source", "type": "string"}, "source_label": {"title": "Source Label", "type": "string"}, "owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Id"}, "owner_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Name"}, "owner_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Avatar Url"}, "lead_list_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lead List Id"}, "lead_list_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lead List Name"}, "next_action_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Next Action At"}, "next_action_channel": {"default": "", "title": "Next Action Channel", "type": "string"}, "next_action_channel_label": {"default": "", "title": "Next Action Channel Label", "type": "string"}, "last_action_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Action At"}, "last_actor_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Last Actor Name"}, "last_actor_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Last Actor Avatar Url"}, "score": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Score"}, "country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Country"}, "tags": {"default": [], "items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "converted_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Converted At"}, "converted_to_org_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Converted To Org Id"}, "converted_to_org_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Converted To Org Name"}, "closed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Closed At"}}, "required": ["id", "name", "status", "status_label", "source", "source_label"], "title": "OutputLeadSummary", "type": "object"}, "OutputAllLeads": {"description": "All leads in the workspace, with their total count.", "properties": {"leads": {"items": {"$ref": "#/components/schemas/OutputLeadSummary"}, "title": "Leads", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}}, "required": ["leads", "total_count"], "title": "OutputAllLeads", "type": "object"}, "OutputLeadListList": {"description": "Lists tab payload \u2014 owned, peer-owned and pool lists, plus the unclaimed leads in no list.", "properties": {"mine": {"default": [], "items": {"$ref": "#/components/schemas/OutputLeadListSummary"}, "title": "Mine", "type": "array"}, "others": {"default": [], "items": {"$ref": "#/components/schemas/OutputLeadListSummary"}, "title": "Others", "type": "array"}, "pools": {"default": [], "items": {"$ref": "#/components/schemas/OutputLeadListSummary"}, "title": "Pools", "type": "array"}, "unclaimed": {"anyOf": [{"$ref": "#/components/schemas/OutputLeadListSummary"}, {"type": "null"}]}, "list_required": {"default": false, "title": "List Required", "type": "boolean"}, "empty_message": {"default": "", "title": "Empty Message", "type": "string"}}, "title": "OutputLeadListList", "type": "object"}, "OutputLeadListSummary": {"description": "Compact representation used in the Lists tab.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Id"}, "owner_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Name"}, "owner_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Avatar Url"}, "is_pool": {"title": "Is Pool", "type": "boolean"}, "is_active": {"title": "Is Active", "type": "boolean"}, "overdue_count": {"default": 0, "title": "Overdue Count", "type": "integer"}, "today_count": {"default": 0, "title": "Today Count", "type": "integer"}, "untriaged_count": {"default": 0, "title": "Untriaged Count", "type": "integer"}, "scheduled_count": {"default": 0, "title": "Scheduled Count", "type": "integer"}, "closed_count": {"default": 0, "title": "Closed Count", "type": "integer"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}}, "required": ["id", "name", "is_pool", "is_active"], "title": "OutputLeadListSummary", "type": "object"}, "OutputLeadOwnerCandidate": {"description": "A workspace member a lead or list can be given to.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Avatar Url"}, "is_me": {"default": false, "title": "Is Me", "type": "boolean"}}, "required": ["id", "name"], "title": "OutputLeadOwnerCandidate", "type": "object"}, "OutputLeadOwnerCandidates": {"properties": {"candidates": {"default": [], "items": {"$ref": "#/components/schemas/OutputLeadOwnerCandidate"}, "title": "Candidates", "type": "array"}}, "title": "OutputLeadOwnerCandidates", "type": "object"}, "OutputLead": {"description": "Lead detail page payload.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "company_name": {"default": "", "title": "Company Name", "type": "string"}, "email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Email"}, "phone": {"default": "", "title": "Phone", "type": "string"}, "job_title": {"default": "", "title": "Job Title", "type": "string"}, "source": {"title": "Source", "type": "string"}, "source_label": {"title": "Source Label", "type": "string"}, "source_note": {"default": "", "title": "Source Note", "type": "string"}, "status": {"title": "Status", "type": "string"}, "status_label": {"title": "Status Label", "type": "string"}, "owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Id"}, "owner_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Name"}, "owner_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Avatar Url"}, "lead_list_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lead List Id"}, "lead_list_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lead List Name"}, "next_action_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Next Action At"}, "next_action_channel": {"default": "", "title": "Next Action Channel", "type": "string"}, "next_action_channel_label": {"default": "", "title": "Next Action Channel Label", "type": "string"}, "next_action_note": {"default": "", "title": "Next Action Note", "type": "string"}, "last_action_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Action At"}, "notes": {"default": "", "title": "Notes", "type": "string"}, "profile_url": {"default": "", "title": "Profile Url", "type": "string"}, "company_url": {"default": "", "title": "Company Url", "type": "string"}, "country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Country"}, "score": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Score"}, "converted_to_org_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Converted To Org Id"}, "converted_to_org_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Converted To Org Name"}, "converted_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Converted At"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "created_by_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Created By Name"}}, "required": ["id", "name", "source", "source_label", "status", "status_label", "created_at", "updated_at"], "title": "OutputLead", "type": "object"}, "OutputLeadTeamRollup": {"properties": {"rows": {"items": {"$ref": "#/components/schemas/OutputLeadTeamRollupRow"}, "title": "Rows", "type": "array"}}, "required": ["rows"], "title": "OutputLeadTeamRollup", "type": "object"}, "OutputLeadTeamRollupRow": {"description": "One row of the per-rep manager dashboard.", "properties": {"member_id": {"title": "Member Id", "type": "string"}, "member_name": {"title": "Member Name", "type": "string"}, "member_avatar_url": {"title": "Member Avatar Url", "type": "string"}, "overdue_count": {"default": 0, "title": "Overdue Count", "type": "integer"}, "today_count": {"default": 0, "title": "Today Count", "type": "integer"}, "untriaged_count": {"default": 0, "title": "Untriaged Count", "type": "integer"}, "scheduled_count": {"default": 0, "title": "Scheduled Count", "type": "integer"}, "converted_30d_count": {"default": 0, "title": "Converted 30D Count", "type": "integer"}}, "required": ["member_id", "member_name", "member_avatar_url"], "title": "OutputLeadTeamRollupRow", "type": "object"}, "SalesActivityContent": {"properties": {"activity_type": {"title": "Activity Type", "type": "string"}, "activity_icon": {"title": "Activity Icon", "type": "string"}, "author_id": {"title": "Author Id", "type": "string"}, "author_name": {"title": "Author Name", "type": "string"}, "author_avatar_url": {"title": "Author Avatar Url", "type": "string"}, "author_email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Author Email"}, "author_phone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Author Phone"}, "org_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Org Id"}, "org_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Org Name"}, "proposal_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Id"}, "proposal_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Name"}, "description": {"title": "Description", "type": "string"}, "addable_contacts": {"default": [], "items": {"type": "string"}, "title": "Addable Contacts", "type": "array"}}, "required": ["activity_type", "activity_icon", "author_id", "author_name", "author_avatar_url", "description"], "title": "SalesActivityContent", "type": "object"}, "SalesActivityFeed": {"properties": {"activities": {"items": {"$ref": "#/components/schemas/SalesFeedActivity"}, "title": "Activities", "type": "array"}, "per_page": {"title": "Per Page", "type": "integer"}, "next_page": {"title": "Next Page", "type": "integer"}, "node_type": {"title": "Node Type", "type": "string"}, "node_id": {"title": "Node Id", "type": "string"}}, "required": ["activities", "per_page", "next_page", "node_type", "node_id"], "title": "SalesActivityFeed", "type": "object"}, "SalesFeedActivity": {"properties": {"id": {"title": "Id", "type": "string"}, "timestamp": {"format": "date-time", "title": "Timestamp", "type": "string"}, "content": {"$ref": "#/components/schemas/SalesActivityContent"}}, "required": ["id", "timestamp", "content"], "title": "SalesFeedActivity", "type": "object"}, "AddLead": {"properties": {"name": {"maxLength": 120, "minLength": 1, "title": "Name", "type": "string"}, "company_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Company Name"}, "email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Email"}, "phone": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Phone"}, "job_title": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Job Title"}, "source": {"default": "other", "enum": ["web_form", "inbound_call", "inbound_email", "organic_search", "paid_ads", "social_media", "linkedin", "email_campaign", "cold_email", "cold_call", "referral", "partner", "existing_customer", "event", "import", "other"], "title": "Source", "type": "string"}, "source_note": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Source Note"}, "status": {"default": "new", "enum": ["new", "contacted", "replied", "nurturing", "qualified", "do_not_contact", "disqualified", "converted"], "title": "Status", "type": "string"}, "owner": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Owner"}, "lead_list": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Lead List"}, "next_action_at": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Action At"}, "next_action_channel": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Next Action Channel"}, "next_action_note": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Next Action Note"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Notes"}, "profile_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Profile Url"}, "company_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Company Url"}, "country": {"anyOf": [{"maxLength": 2, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "Country"}, "score": {"anyOf": [{"maximum": 100, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Score"}}, "required": ["name"], "title": "AddLead", "type": "object"}, "EditLead": {"properties": {"name": {"maxLength": 120, "minLength": 1, "title": "Name", "type": "string"}, "company_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Company Name"}, "email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Email"}, "phone": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Phone"}, "job_title": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Job Title"}, "source": {"default": "other", "enum": ["web_form", "inbound_call", "inbound_email", "organic_search", "paid_ads", "social_media", "linkedin", "email_campaign", "cold_email", "cold_call", "referral", "partner", "existing_customer", "event", "import", "other"], "title": "Source", "type": "string"}, "source_note": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Source Note"}, "status": {"default": "new", "enum": ["new", "contacted", "replied", "nurturing", "qualified", "do_not_contact", "disqualified", "converted"], "title": "Status", "type": "string"}, "owner": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Owner"}, "lead_list": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Lead List"}, "next_action_at": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Action At"}, "next_action_channel": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Next Action Channel"}, "next_action_note": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Next Action Note"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Notes"}, "profile_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Profile Url"}, "company_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Company Url"}, "country": {"anyOf": [{"maxLength": 2, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "Country"}, "score": {"anyOf": [{"maximum": 100, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Score"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["name", "updated_at"], "title": "EditLead", "type": "object"}, "LogLeadActivity": {"properties": {"activity_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Activity Type", "type": "string"}, "note": {"maxLength": 10000, "minLength": 1, "title": "Note", "type": "string"}, "next_action_at": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Action At"}, "next_action_channel": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Next Action Channel"}, "next_action_note": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Next Action Note"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["activity_type", "note", "updated_at"], "title": "LogLeadActivity", "type": "object"}, "RescheduleLead": {"properties": {"next_action_at": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Action At"}, "next_action_channel": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Next Action Channel"}, "next_action_note": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Next Action Note"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["updated_at"], "title": "RescheduleLead", "type": "object"}, "UpdateLeadStatus": {"properties": {"status": {"enum": ["new", "contacted", "replied", "nurturing", "qualified"], "title": "Status", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["status", "updated_at"], "title": "UpdateLeadStatus", "type": "object"}, "DisqualifyLead": {"properties": {"reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Reason"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["updated_at"], "title": "DisqualifyLead", "type": "object"}, "MarkLeadDoNotContact": {"properties": {"reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Reason"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["updated_at"], "title": "MarkLeadDoNotContact", "type": "object"}, "MarkLeadConverted": {"description": "Convert a lead to an Opportunity.\n\nTwo branches:\n  1. Existing-org branch: caller supplies `org` (a 32-hex external_id of\n     an active subtenant) and leaves the new_org_* fields empty/absent.\n  2. New-org branch: caller leaves `org` empty/absent and supplies the\n     full new_org_* set; the API creates the subtenant, then converts.\n\nCross-field validation rejects \"neither\" and \"both\", and requires the\nfull new_org_* set when the new-org branch is taken (single-field gaps\nreturn a clear error rather than a downstream IntegrityError).", "properties": {"org": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Org"}, "new_org_name": {"anyOf": [{"maxLength": 100, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "New Org Name"}, "new_org_currency": {"anyOf": [{"maxLength": 3, "minLength": 0, "type": "string"}, {"type": "null"}], "title": "New Org Currency"}, "new_org_country": {"anyOf": [{"maxLength": 3, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "New Org Country"}, "new_org_timezone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "New Org Timezone"}, "new_org_manager": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "New Org Manager"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["updated_at"], "title": "MarkLeadConverted", "type": "object"}, "FastProposalStageOption": {"description": "A funnel stage a fast proposal may land in.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "funnel_name": {"title": "Funnel Name", "type": "string"}, "label": {"title": "Label", "type": "string"}}, "required": ["id", "name", "funnel_name", "label"], "title": "FastProposalStageOption", "type": "object"}, "OutputFastProposalOptions": {"description": "What a client needs before offering the Fast Proposal form for one lead.\n\n`blockers` is the same list the web form shows instead of its fields: when it is not empty,\nsubmitting cannot succeed. `updated_at` is the lead's, for the submit's optimistic lock.", "properties": {"lead_id": {"title": "Lead Id", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "customer_name": {"title": "Customer Name", "type": "string"}, "has_customer_org": {"title": "Has Customer Org", "type": "boolean"}, "currency_code": {"title": "Currency Code", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "stages": {"items": {"$ref": "#/components/schemas/FastProposalStageOption"}, "title": "Stages", "type": "array"}, "blockers": {"items": {"type": "string"}, "title": "Blockers", "type": "array"}}, "required": ["lead_id", "updated_at", "customer_name", "has_customer_org", "currency_code", "currency_symbol", "stages", "blockers"], "title": "OutputFastProposalOptions", "type": "object"}, "FastProposal": {"description": "Turn a claimed lead into a priced proposal in one step.\n\nThe worker's phone call *is* the offer, so there is no draft and no send step: the customer\norganization, the proposal and its single priced line are created together, and the proposal\nlands in a stage from which the deal can go straight to won or lost.\n\nCurrency is deliberately absent. It is not a decision the person filing the call should be\nmaking, so the workspace default is applied server-side; a client that supplies one is ignored.", "properties": {"customer_name": {"maxLength": 100, "minLength": 2, "title": "Customer Name", "type": "string"}, "sales_stage": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Sales Stage", "type": "string"}, "product_name": {"maxLength": 255, "minLength": 2, "title": "Product Name", "type": "string"}, "amount": {"anyOf": [{"exclusiveMinimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d{0,2}0*$", "type": "string"}], "title": "Amount"}, "planned_end": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned End"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["customer_name", "sales_stage", "product_name", "amount", "updated_at"], "title": "FastProposal", "type": "object"}, "ReopenLead": {"properties": {"updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["updated_at"], "title": "ReopenLead", "type": "object"}, "ClaimLead": {"properties": {"updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["updated_at"], "title": "ClaimLead", "type": "object"}, "OutputLeadImportPreview": {"description": "Preview-state of CSV import \u2014 shown before the rep clicks Confirm.", "properties": {"mapped_columns": {"items": {"type": "string"}, "title": "Mapped Columns", "type": "array"}, "unmapped_columns": {"items": {"type": "string"}, "title": "Unmapped Columns", "type": "array"}, "row_count": {"title": "Row Count", "type": "integer"}, "has_header": {"title": "Has Header", "type": "boolean"}, "upload_token": {"title": "Upload Token", "type": "string"}, "estimated_duplicates": {"default": 0, "title": "Estimated Duplicates", "type": "integer"}, "assigned_list_name": {"default": "", "title": "Assigned List Name", "type": "string"}, "default_next_action": {"default": "triage_later", "title": "Default Next Action", "type": "string"}}, "required": ["mapped_columns", "unmapped_columns", "row_count", "has_header", "upload_token"], "title": "OutputLeadImportPreview", "type": "object"}, "OutputLeadImportError": {"properties": {"row_number": {"title": "Row Number", "type": "integer"}, "reason": {"title": "Reason", "type": "string"}, "detail": {"default": "", "title": "Detail", "type": "string"}}, "required": ["row_number", "reason"], "title": "OutputLeadImportError", "type": "object"}, "OutputLeadImportSummary": {"description": "Result-state of CSV import.", "properties": {"imported_count": {"title": "Imported Count", "type": "integer"}, "skipped_count": {"title": "Skipped Count", "type": "integer"}, "error_count": {"title": "Error Count", "type": "integer"}, "lead_list_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lead List Id"}, "errors": {"default": [], "items": {"$ref": "#/components/schemas/OutputLeadImportError"}, "title": "Errors", "type": "array"}}, "required": ["imported_count", "skipped_count", "error_count"], "title": "OutputLeadImportSummary", "type": "object"}, "AddLeadList": {"properties": {"name": {"maxLength": 120, "minLength": 1, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "instructions": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Instructions"}, "owner": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Owner"}, "is_active": {"default": true, "title": "Is Active", "type": "boolean"}}, "required": ["name"], "title": "AddLeadList", "type": "object"}, "EditLeadList": {"properties": {"name": {"maxLength": 120, "minLength": 1, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "instructions": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Instructions"}, "owner": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Owner"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["name", "updated_at"], "title": "EditLeadList", "type": "object"}, "ReassignLeadList": {"description": "Change the owner of a list (own-scope: change my list to someone else).", "properties": {"owner": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Owner"}, "cascade_to_leads": {"default": false, "title": "Cascade To Leads", "type": "boolean"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["updated_at"], "title": "ReassignLeadList", "type": "object"}, "ReassignLeadsInList": {"description": "Admin cross-owner bulk reassign within a single list.", "properties": {"from_owner": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "From Owner"}, "to_owner": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "To Owner", "type": "string"}}, "required": ["to_owner"], "title": "ReassignLeadsInList", "type": "object"}, "OutputLeadTags": {"properties": {"lead": {"title": "Lead", "type": "string"}, "tags": {"default": [], "items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}, "unassigned_tags": {"default": [], "items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Unassigned Tags", "type": "array"}}, "required": ["lead"], "title": "OutputLeadTags", "type": "object"}, "OutputLeadLabels": {"properties": {"lead": {"title": "Lead", "type": "string"}, "labels": {"default": [], "items": {"$ref": "#/components/schemas/OutputLabel"}, "title": "Labels", "type": "array"}}, "required": ["lead"], "title": "OutputLeadLabels", "type": "object"}, "LabelLeadInput": {"description": "Add/replace a label value on a Lead.", "properties": {"lead": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Lead", "type": "string"}, "label": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Label", "type": "string"}, "value_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value Text"}, "value_integer": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Value Integer"}, "value_decimal": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Value Decimal"}, "value_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Value Date"}}, "required": ["lead", "label"], "title": "LabelLeadInput", "type": "object"}, "TenantFunnelConfiguration": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "description": {"title": "Description", "type": "string"}, "used_for_quote_requests": {"default": false, "title": "Used For Quote Requests", "type": "boolean"}, "used_for_orders": {"default": false, "title": "Used For Orders", "type": "boolean"}}, "required": ["id", "name", "is_active", "description"], "title": "TenantFunnelConfiguration", "type": "object"}, "TenantFunnelConfigurations": {"properties": {"funnelconfigurations": {"items": {"$ref": "#/components/schemas/TenantFunnelConfiguration"}, "title": "Funnelconfigurations", "type": "array"}}, "required": ["funnelconfigurations"], "title": "TenantFunnelConfigurations", "type": "object"}, "TenantProductLifecycle": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "is_default": {"title": "Is Default", "type": "boolean"}, "is_active": {"title": "Is Active", "type": "boolean"}, "sequence_no": {"title": "Sequence No", "type": "integer"}}, "required": ["id", "name", "description", "is_default", "is_active", "sequence_no"], "title": "TenantProductLifecycle", "type": "object"}, "TenantProductLifecycles": {"properties": {"productlifecycles": {"items": {"$ref": "#/components/schemas/TenantProductLifecycle"}, "title": "Productlifecycles", "type": "array"}}, "required": ["productlifecycles"], "title": "TenantProductLifecycles", "type": "object"}, "AddProductLifecycle": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": true, "title": "Is Active"}, "description": {"default": "", "title": "Description", "type": "string"}, "is_default": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Default"}, "sequence_no": {"anyOf": [{"type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}}, "required": ["name"], "title": "AddProductLifecycle", "type": "object"}, "EditProductLifecycle": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "is_default": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Default"}, "sequence_no": {"anyOf": [{"type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}}, "required": ["name"], "title": "EditProductLifecycle", "type": "object"}, "AddFunnelConfiguration": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Active"}, "description": {"title": "Description", "type": "string"}}, "required": ["name", "description"], "title": "AddFunnelConfiguration", "type": "object"}, "EditFunnelConfiguration": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "used_for_quote_requests": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Used For Quote Requests"}, "used_for_orders": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Used For Orders"}}, "required": ["name"], "title": "EditFunnelConfiguration", "type": "object"}, "TenantFunnelConfigurationStage": {"properties": {"id": {"title": "Id", "type": "string"}, "sequence": {"title": "Sequence", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "stage_type": {"title": "Stage Type", "type": "string"}, "transitions": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "default": [], "title": "Transitions"}, "stage_type_display": {"default": "", "title": "Stage Type Display", "type": "string"}, "transitions_display": {"default": [], "items": {"type": "string"}, "title": "Transitions Display", "type": "array"}}, "required": ["id", "sequence", "name", "description", "is_active", "stage_type"], "title": "TenantFunnelConfigurationStage", "type": "object"}, "TenantFunnelConfigurationStages": {"properties": {"funnel_configuration": {"title": "Funnel Configuration", "type": "string"}, "stages": {"items": {"$ref": "#/components/schemas/TenantFunnelConfigurationStage"}, "title": "Stages", "type": "array"}, "has_lead_stage": {"title": "Has Lead Stage", "type": "boolean"}, "has_closed_won_stage": {"title": "Has Closed Won Stage", "type": "boolean"}, "has_closed_lost_stage": {"title": "Has Closed Lost Stage", "type": "boolean"}}, "required": ["funnel_configuration", "stages", "has_lead_stage", "has_closed_won_stage", "has_closed_lost_stage"], "title": "TenantFunnelConfigurationStages", "type": "object"}, "AddStageToFunnelConfiguration": {"properties": {"sequence_no": {"exclusiveMaximum": 100, "exclusiveMinimum": 0, "title": "Sequence No", "type": "integer"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Active"}, "description": {"title": "Description", "type": "string"}, "instructions": {"title": "Instructions", "type": "string"}, "stage_type": {"maxLength": 17, "minLength": 4, "title": "Stage Type", "type": "string"}}, "required": ["sequence_no", "name", "description", "instructions", "stage_type"], "title": "AddStageToFunnelConfiguration", "type": "object"}, "EditFunnelStage": {"properties": {"sequence_no": {"exclusiveMaximum": 100, "exclusiveMinimum": 0, "title": "Sequence No", "type": "integer"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "instructions": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Instructions"}, "stage_type": {"maxLength": 17, "minLength": 4, "title": "Stage Type", "type": "string"}}, "required": ["sequence_no", "name", "stage_type"], "title": "EditFunnelStage", "type": "object"}, "TenantProductLifecycleStage": {"properties": {"id": {"title": "Id", "type": "string"}, "sequence_no": {"title": "Sequence No", "type": "integer"}, "name": {"title": "Name", "type": "string"}, "lifecycle_type": {"title": "Lifecycle Type", "type": "string"}, "lifecycle_type_display": {"title": "Lifecycle Type Display", "type": "string"}, "visible_to_customer": {"title": "Visible To Customer", "type": "boolean"}, "is_active": {"title": "Is Active", "type": "boolean"}, "transitions": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "default": [], "title": "Transitions"}}, "required": ["id", "sequence_no", "name", "lifecycle_type", "lifecycle_type_display", "visible_to_customer", "is_active"], "title": "TenantProductLifecycleStage", "type": "object"}, "TenantProductLifecycleStages": {"properties": {"productlifecycle_id": {"title": "Productlifecycle Id", "type": "string"}, "stages": {"items": {"$ref": "#/components/schemas/TenantProductLifecycleStage"}, "title": "Stages", "type": "array"}, "has_todo_stage": {"title": "Has Todo Stage", "type": "boolean"}, "has_accepted_stage": {"title": "Has Accepted Stage", "type": "boolean"}, "has_completed_stage": {"title": "Has Completed Stage", "type": "boolean"}}, "required": ["productlifecycle_id", "stages", "has_todo_stage", "has_accepted_stage", "has_completed_stage"], "title": "TenantProductLifecycleStages", "type": "object"}, "AddStageToProductLifecycle": {"properties": {"sequence_no": {"exclusiveMaximum": 100, "exclusiveMinimum": 0, "title": "Sequence No", "type": "integer"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "lifecycle_type": {"maxLength": 30, "minLength": 2, "title": "Lifecycle Type", "type": "string"}, "visible_to_customer": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Visible To Customer"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Active"}}, "required": ["sequence_no", "name", "lifecycle_type"], "title": "AddStageToProductLifecycle", "type": "object"}, "EditProductLifecycleStage": {"properties": {"sequence_no": {"exclusiveMaximum": 100, "exclusiveMinimum": 0, "title": "Sequence No", "type": "integer"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "lifecycle_type": {"maxLength": 30, "minLength": 2, "title": "Lifecycle Type", "type": "string"}, "visible_to_customer": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Visible To Customer"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "required": ["sequence_no", "name", "lifecycle_type"], "title": "EditProductLifecycleStage", "type": "object"}, "TenantFunnel": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "description": {"title": "Description", "type": "string"}, "proposals": {"title": "Proposals", "type": "integer"}, "currency_aggregates": {"additionalProperties": true, "title": "Currency Aggregates", "type": "object"}}, "required": ["id", "name", "is_active", "description", "proposals", "currency_aggregates"], "title": "TenantFunnel", "type": "object"}, "TenantFunnels": {"properties": {"funnels": {"items": {"$ref": "#/components/schemas/TenantFunnel"}, "title": "Funnels", "type": "array"}}, "required": ["funnels"], "title": "TenantFunnels", "type": "object"}, "FunnelStageCurrency": {"description": "One currency's deals in a funnel stage, in that currency.", "properties": {"count": {"title": "Count", "type": "integer"}, "value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Value", "type": "string"}, "symbol": {"title": "Symbol", "type": "string"}}, "required": ["count", "value", "symbol"], "title": "FunnelStageCurrency", "type": "object"}, "FunnelStageSchema": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "is_lead": {"title": "Is Lead", "type": "boolean"}, "proposal_count": {"title": "Proposal Count", "type": "integer"}, "total_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Value"}, "average_deal_size": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Average Deal Size"}, "average_days_in_stage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Average Days In Stage", "type": "string"}, "total_value_symbol": {"title": "Total Value Symbol", "type": "string"}, "currency_breakdown": {"anyOf": [{"additionalProperties": {"$ref": "#/components/schemas/FunnelStageCurrency"}, "type": "object"}, {"type": "null"}], "title": "Currency Breakdown"}}, "required": ["id", "name", "description", "is_lead", "proposal_count", "average_days_in_stage", "total_value_symbol"], "title": "FunnelStageSchema", "type": "object"}, "TenantFunnelOverview": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "stages": {"items": {"$ref": "#/components/schemas/FunnelStageSchema"}, "title": "Stages", "type": "array"}, "total_pipeline_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Pipeline Value", "type": "string"}, "total_deals": {"title": "Total Deals", "type": "integer"}, "average_deal_size": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Average Deal Size", "type": "string"}, "average_days_per_stage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Average Days Per Stage", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "pipeline_by_currency": {"anyOf": [{"additionalProperties": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, "type": "object"}, {"type": "null"}], "title": "Pipeline By Currency"}, "avg_deal_size_by_currency": {"anyOf": [{"additionalProperties": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, "type": "object"}, {"type": "null"}], "title": "Avg Deal Size By Currency"}, "currency_symbols": {"anyOf": [{"additionalProperties": {"type": "string"}, "type": "object"}, {"type": "null"}], "title": "Currency Symbols"}, "deal_count_by_currency": {"anyOf": [{"additionalProperties": {"type": "integer"}, "type": "object"}, {"type": "null"}], "title": "Deal Count By Currency"}, "has_mixed_currencies": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Has Mixed Currencies"}}, "required": ["id", "name", "description", "stages", "total_pipeline_value", "total_deals", "average_deal_size", "average_days_per_stage", "currency_symbol"], "title": "TenantFunnelOverview", "type": "object"}, "OutputSaleActivityTypes": {"properties": {"activity_types": {"items": {"$ref": "#/components/schemas/SaleActivityTypeItem"}, "title": "Activity Types", "type": "array"}}, "required": ["activity_types"], "title": "OutputSaleActivityTypes", "type": "object"}, "SaleActivityTypeItem": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "activity_type": {"title": "Activity Type", "type": "string"}, "icon": {"title": "Icon", "type": "string"}}, "required": ["id", "name", "activity_type", "icon"], "title": "SaleActivityTypeItem", "type": "object"}, "AddSalesActivity": {"properties": {"activity_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Activity Type", "type": "string"}, "org": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Org"}, "project": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Project"}, "note": {"title": "Note", "type": "string"}}, "required": ["activity_type", "note"], "title": "AddSalesActivity", "type": "object"}, "AddCatalogProduct": {"properties": {"name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "description_for_customer": {"title": "Description For Customer", "type": "string"}, "product_type": {"enum": ["good", "service", "bundle"], "title": "Product Type", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Active"}, "default_lifecycle": {"title": "Default Lifecycle", "type": "string"}, "payment_integration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Payment Integration Id"}, "pricing_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Pricing Currency"}, "pricing_type": {"enum": ["fixed_price", "time_and_materials", "hourly_rate", "per_unit", "subscription_per_month", "subscription_per_year"], "title": "Pricing Type", "type": "string"}, "pricing_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pricing Value"}, "cost_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Cost Value"}, "cost_currency": {"title": "Cost Currency", "type": "string"}, "unit_of_measure": {"anyOf": [{"maxLength": 10, "type": "string"}, {"type": "null"}], "title": "Unit Of Measure"}, "track_stock": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Track Stock"}, "stock_quantity": {"anyOf": [{"maximum": 999999999, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Stock Quantity"}, "available_in_customer_portal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Available In Customer Portal"}, "available_in_partner_portals": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Available In Partner Portals"}, "price_lists": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Price Lists"}}, "required": ["name", "description", "description_for_customer", "product_type", "default_lifecycle", "pricing_type", "cost_value", "cost_currency"], "title": "AddCatalogProduct", "type": "object"}, "EditCatalogProduct": {"properties": {"name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "description_for_customer": {"title": "Description For Customer", "type": "string"}, "product_type": {"enum": ["good", "service", "bundle"], "title": "Product Type", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "default_lifecycle": {"title": "Default Lifecycle", "type": "string"}, "payment_integration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Payment Integration Id"}, "pricing_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Pricing Currency"}, "pricing_type": {"enum": ["fixed_price", "time_and_materials", "hourly_rate", "per_unit", "subscription_per_month", "subscription_per_year"], "title": "Pricing Type", "type": "string"}, "pricing_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pricing Value"}, "cost_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Cost Value"}, "cost_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cost Currency"}, "unit_of_measure": {"anyOf": [{"maxLength": 10, "type": "string"}, {"type": "null"}], "title": "Unit Of Measure"}, "track_stock": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Track Stock"}, "stock_quantity": {"anyOf": [{"maximum": 999999999, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Stock Quantity"}, "available_in_customer_portal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Available In Customer Portal"}, "available_in_partner_portals": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Available In Partner Portals"}, "price_lists": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Price Lists"}}, "required": ["name", "description", "description_for_customer", "product_type", "default_lifecycle", "pricing_type"], "title": "EditCatalogProduct", "type": "object"}, "CatalogProduct": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "product_type": {"title": "Product Type", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "payment_integration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Payment Integration Id"}, "owner_id": {"title": "Owner Id", "type": "string"}, "owner_name": {"title": "Owner Name", "type": "string"}, "pricing_type": {"title": "Pricing Type", "type": "string"}, "pricing_currency": {"title": "Pricing Currency", "type": "string"}, "pricing_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Pricing Value", "type": "string"}, "unit_of_measure": {"default": "", "title": "Unit Of Measure", "type": "string"}, "track_stock": {"default": false, "title": "Track Stock", "type": "boolean"}, "stock_quantity": {"default": 0, "title": "Stock Quantity", "type": "integer"}, "available_in_customer_portal": {"default": false, "title": "Available In Customer Portal", "type": "boolean"}, "available_in_partner_portals": {"default": false, "title": "Available In Partner Portals", "type": "boolean"}, "image_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Image Url"}}, "required": ["id", "name", "product_type", "is_active", "owner_id", "owner_name", "pricing_type", "pricing_currency", "pricing_value"], "title": "CatalogProduct", "type": "object"}, "CatalogProducts": {"properties": {"pricing_type": {"title": "Pricing Type", "type": "string"}, "products": {"items": {"$ref": "#/components/schemas/CatalogProduct"}, "title": "Products", "type": "array"}}, "required": ["pricing_type", "products"], "title": "CatalogProducts", "type": "object"}, "FunnelWonProposals": {"properties": {"proposals": {"items": {"$ref": "#/components/schemas/ProposalDetail"}, "title": "Proposals", "type": "array"}, "funnel_name": {"title": "Funnel Name", "type": "string"}, "funnel_id": {"title": "Funnel Id", "type": "string"}, "total_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Value"}, "total_count": {"title": "Total Count", "type": "integer"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "has_mixed_currencies": {"title": "Has Mixed Currencies", "type": "boolean"}, "currency_breakdown": {"anyOf": [{"additionalProperties": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, "type": "object"}, {"type": "null"}], "title": "Currency Breakdown"}, "stage_type": {"title": "Stage Type", "type": "string"}}, "required": ["proposals", "funnel_name", "funnel_id", "total_count", "currency_symbol", "has_mixed_currencies", "stage_type"], "title": "FunnelWonProposals", "type": "object"}, "ProposalDetail": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "customer": {"title": "Customer", "type": "string"}, "customer_id": {"title": "Customer Id", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "internal_costs": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Internal Costs", "type": "string"}, "external_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "External Value", "type": "string"}, "margin": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Margin", "type": "string"}, "margin_percent": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Margin Percent", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "owner_name": {"title": "Owner Name", "type": "string"}, "days_in_stage": {"title": "Days In Stage", "type": "integer"}, "product_count": {"title": "Product Count", "type": "integer"}, "last_activity": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Activity"}, "days_since_last_activity": {"title": "Days Since Last Activity", "type": "integer"}, "transitions": {"anyOf": [{"items": {"items": {}, "type": "array"}, "type": "array"}, {"type": "null"}], "default": [], "title": "Transitions"}, "funnel_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Funnel Name"}, "funnel_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Funnel Id"}, "rejection_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Rejection Reason"}, "rejected_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Rejected At"}}, "required": ["id", "name", "customer", "customer_id", "created_at", "internal_costs", "external_value", "margin", "margin_percent", "currency", "currency_symbol", "owner_name", "days_in_stage", "product_count", "days_since_last_activity"], "title": "ProposalDetail", "type": "object"}, "FunnelLostProposals": {"properties": {"proposals": {"items": {"$ref": "#/components/schemas/ProposalDetail"}, "title": "Proposals", "type": "array"}, "funnel_name": {"title": "Funnel Name", "type": "string"}, "funnel_id": {"title": "Funnel Id", "type": "string"}, "total_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Value"}, "total_count": {"title": "Total Count", "type": "integer"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "has_mixed_currencies": {"title": "Has Mixed Currencies", "type": "boolean"}, "currency_breakdown": {"anyOf": [{"additionalProperties": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, "type": "object"}, {"type": "null"}], "title": "Currency Breakdown"}, "stage_type": {"title": "Stage Type", "type": "string"}, "node_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Node Type"}, "node_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Node Id"}, "node_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Node Name"}}, "required": ["proposals", "funnel_name", "funnel_id", "total_count", "currency_symbol", "has_mixed_currencies", "stage_type"], "title": "FunnelLostProposals", "type": "object"}, "OutputTopSellingProducts": {"description": "Top selling products list", "properties": {"products": {"items": {"$ref": "#/components/schemas/TopSellingProduct"}, "title": "Products", "type": "array"}, "period": {"title": "Period", "type": "string"}}, "required": ["products", "period"], "title": "OutputTopSellingProducts", "type": "object"}, "TopSellingProduct": {"description": "Individual top selling product", "properties": {"rank": {"title": "Rank", "type": "integer"}, "product_id": {"title": "Product Id", "type": "string"}, "product_name": {"title": "Product Name", "type": "string"}, "product_type": {"title": "Product Type", "type": "string"}, "product_type_display": {"title": "Product Type Display", "type": "string"}, "units_sold": {"title": "Units Sold", "type": "integer"}, "total_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Revenue"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "currency_code": {"default": "", "title": "Currency Code", "type": "string"}}, "required": ["rank", "product_id", "product_name", "product_type", "product_type_display", "units_sold", "currency_symbol"], "title": "TopSellingProduct", "type": "object"}, "DashboardMetric": {"description": "Individual metric for display with comparison data", "properties": {"label": {"title": "Label", "type": "string"}, "value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Value", "type": "string"}, "change_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Change Percent"}, "trend": {"title": "Trend", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "current_period": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Current Period"}, "comparison_period": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Comparison Period"}}, "required": ["label", "value", "trend", "currency"], "title": "DashboardMetric", "type": "object"}, "OutputTotalProductsSold": {"description": "Total catalog products sold metric", "properties": {"metric": {"$ref": "#/components/schemas/DashboardMetric"}, "breakdown_by_type": {"items": {"additionalProperties": true, "type": "object"}, "title": "Breakdown By Type", "type": "array"}}, "required": ["metric", "breakdown_by_type"], "title": "OutputTotalProductsSold", "type": "object"}, "OutputProductDetails": {"description": "Product details with sales analytics", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "pricing_type": {"title": "Pricing Type", "type": "string"}, "pricing_type_display": {"title": "Pricing Type Display", "type": "string"}, "product_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Type"}, "pricing_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Pricing Value", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "owner_name": {"title": "Owner Name", "type": "string"}, "payment_integration_id": {"title": "Payment Integration Id", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "times_sold": {"title": "Times Sold", "type": "integer"}, "won_proposals_percent": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Won Proposals Percent", "type": "string"}, "lost_proposals_percent": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Lost Proposals Percent", "type": "string"}, "sales_time_series": {"items": {"$ref": "#/components/schemas/ProductSalesTimeSeries"}, "title": "Sales Time Series", "type": "array"}}, "required": ["id", "name", "pricing_type", "pricing_type_display", "pricing_value", "currency", "currency_symbol", "is_active", "owner_name", "payment_integration_id", "created_at", "updated_at", "times_sold", "won_proposals_percent", "lost_proposals_percent", "sales_time_series"], "title": "OutputProductDetails", "type": "object"}, "ProductSalesTimeSeries": {"description": "Time series data point for product sales", "properties": {"date": {"format": "date", "title": "Date", "type": "string"}, "quantity": {"title": "Quantity", "type": "integer"}}, "required": ["date", "quantity"], "title": "ProductSalesTimeSeries", "type": "object"}, "AddPriceList": {"description": "A price list: which catalog items a customer or partner sees in their portal, and at what price.", "properties": {"name": {"maxLength": 255, "minLength": 1, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": true, "title": "Is Active"}}, "required": ["name"], "title": "AddPriceList", "type": "object"}, "EditPriceList": {"properties": {"name": {"anyOf": [{"maxLength": 255, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Name"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "title": "EditPriceList", "type": "object"}, "EditPriceListItems": {"description": "The list's items, as a whole: items left out leave the list.", "properties": {"items": {"items": {"$ref": "#/components/schemas/PriceListEntry"}, "title": "Items", "type": "array"}}, "required": ["items"], "title": "EditPriceListItems", "type": "object"}, "PriceListEntry": {"properties": {"catalog_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Catalog Id", "type": "string"}, "override_price": {"anyOf": [{"minimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*(?:\\d{0,13}|(?=[\\d.]{1,16}0*$)\\d{0,13}\\.\\d{0,2}0*$)", "type": "string"}, {"type": "null"}], "title": "Override Price"}, "override_currency": {"anyOf": [{"maxLength": 3, "minLength": 3, "type": "string"}, {"type": "null"}], "title": "Override Currency"}}, "required": ["catalog_id"], "title": "PriceListEntry", "type": "object"}, "SetPriceLists": {"description": "The price lists a customer organization or a partnership holds, as a whole: an empty list\ntakes them all away.", "properties": {"price_lists": {"items": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, "title": "Price Lists", "type": "array"}}, "required": ["price_lists"], "title": "SetPriceLists", "type": "object"}, "OutputTargetBand": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "threshold_percent": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Threshold Percent", "type": "string"}, "sequence_no": {"title": "Sequence No", "type": "integer"}}, "required": ["id", "name", "threshold_percent", "sequence_no"], "title": "OutputTargetBand", "type": "object"}, "OutputTargetScheme": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "is_default": {"title": "Is Default", "type": "boolean"}, "is_active": {"title": "Is Active", "type": "boolean"}, "band_count": {"title": "Band Count", "type": "integer"}, "bands": {"anyOf": [{"items": {"$ref": "#/components/schemas/OutputTargetBand"}, "type": "array"}, {"type": "null"}], "title": "Bands"}, "target_count": {"default": 0, "title": "Target Count", "type": "integer"}, "is_ladder_complete": {"default": false, "title": "Is Ladder Complete", "type": "boolean"}}, "required": ["id", "name", "description", "is_default", "is_active", "band_count"], "title": "OutputTargetScheme", "type": "object"}, "OutputTargetSchemes": {"properties": {"target_schemes": {"items": {"$ref": "#/components/schemas/OutputTargetScheme"}, "title": "Target Schemes", "type": "array"}}, "required": ["target_schemes"], "title": "OutputTargetSchemes", "type": "object"}, "OutputSalesTarget": {"properties": {"id": {"title": "Id", "type": "string"}, "member": {"title": "Member", "type": "string"}, "member_name": {"title": "Member Name", "type": "string"}, "scheme": {"title": "Scheme", "type": "string"}, "scheme_name": {"title": "Scheme Name", "type": "string"}, "metric": {"title": "Metric", "type": "string"}, "metric_label": {"title": "Metric Label", "type": "string"}, "amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Amount", "type": "string"}, "currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency"}, "period_start": {"format": "date", "title": "Period Start", "type": "string"}, "period_end": {"format": "date", "title": "Period End", "type": "string"}, "months": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Months"}, "per_month": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Per Month"}, "status": {"title": "Status", "type": "string"}, "notes": {"title": "Notes", "type": "string"}, "updated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Updated At"}}, "required": ["id", "member", "member_name", "scheme", "scheme_name", "metric", "metric_label", "amount", "period_start", "period_end", "status", "notes"], "title": "OutputSalesTarget", "type": "object"}, "OutputSalesTargets": {"properties": {"sales_targets": {"items": {"$ref": "#/components/schemas/OutputSalesTarget"}, "title": "Sales Targets", "type": "array"}}, "required": ["sales_targets"], "title": "OutputSalesTargets", "type": "object"}, "AddTargetScheme": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "is_default": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Default"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": true, "title": "Is Active"}}, "required": ["name"], "title": "AddTargetScheme", "type": "object"}, "EditTargetScheme": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "is_default": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Default"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "required": ["name"], "title": "EditTargetScheme", "type": "object"}, "AddTargetBand": {"properties": {"name": {"maxLength": 60, "minLength": 1, "title": "Name", "type": "string"}, "threshold_percent": {"anyOf": [{"exclusiveMinimum": 0.0, "maximum": 1000.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Threshold Percent"}, "sequence_no": {"exclusiveMaximum": 100, "exclusiveMinimum": 0, "title": "Sequence No", "type": "integer"}}, "required": ["name", "threshold_percent", "sequence_no"], "title": "AddTargetBand", "type": "object"}, "EditTargetBand": {"properties": {"name": {"maxLength": 60, "minLength": 1, "title": "Name", "type": "string"}, "threshold_percent": {"anyOf": [{"exclusiveMinimum": 0.0, "maximum": 1000.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Threshold Percent"}, "sequence_no": {"anyOf": [{"exclusiveMaximum": 100, "exclusiveMinimum": 0, "type": "integer"}, {"type": "null"}], "title": "Sequence No"}}, "required": ["name"], "title": "EditTargetBand", "type": "object"}, "AddSalesTarget": {"properties": {"member": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Member", "type": "string"}, "scheme": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Scheme", "type": "string"}, "metric": {"default": "revenue", "enum": ["revenue", "deals_won"], "title": "Metric", "type": "string"}, "amount": {"anyOf": [{"exclusiveMinimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Amount"}, "currency": {"anyOf": [{"maxLength": 3, "minLength": 3, "type": "string"}, {"type": "null"}], "title": "Currency"}, "period_start": {"title": "Period Start", "type": "string"}, "period_end": {"title": "Period End", "type": "string"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Notes"}}, "required": ["member", "scheme", "amount", "period_start", "period_end"], "title": "AddSalesTarget", "type": "object"}, "EditSalesTarget": {"properties": {"member": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Member"}, "scheme": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Scheme"}, "metric": {"anyOf": [{"enum": ["revenue", "deals_won"], "type": "string"}, {"type": "null"}], "title": "Metric"}, "amount": {"anyOf": [{"exclusiveMinimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Amount"}, "currency": {"anyOf": [{"maxLength": 3, "minLength": 3, "type": "string"}, {"type": "null"}], "title": "Currency"}, "period_start": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Start"}, "period_end": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period End"}, "status": {"anyOf": [{"enum": ["active", "inactive", "void"], "type": "string"}, {"type": "null"}], "title": "Status"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Notes"}}, "title": "EditSalesTarget", "type": "object"}, "AddProposal": {"properties": {"internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "customer": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Customer", "type": "string"}, "rfp_publication": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Rfp Publication"}, "customer_location": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Location"}, "customer_asset": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Asset"}, "owner": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Owner", "type": "string"}, "manager": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Manager", "type": "string"}, "sales_stage": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Sales Stage", "type": "string"}, "proposal_currency": {"maxLength": 3, "minLength": 3, "title": "Proposal Currency", "type": "string"}, "pricing_strategy": {"anyOf": [{"enum": ["product_prices", "percentage", "fixed_amount", "margin_target"], "type": "string"}, {"type": "null"}], "default": "product_prices", "title": "Pricing Strategy"}, "pricing_adjustment_percent": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "0.00", "title": "Pricing Adjustment Percent"}, "pricing_adjustment_amount": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "0.00", "title": "Pricing Adjustment Amount"}, "target_margin_percent": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "30.00", "title": "Target Margin Percent"}, "minimum_margin_percent": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "20.00", "title": "Minimum Margin Percent"}, "proposal_valid_since": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Valid Since"}, "proposal_valid_until": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Valid Until"}, "project_start_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Start Date"}, "project_end_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project End Date"}, "project_enable_booking_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Booking Management"}, "project_enable_resource_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Resource Management"}, "project_enable_effort_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Effort Management"}, "project_enable_financial_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Financial Management"}, "project_enable_schedule_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Schedule Management"}, "project_enable_earned_value_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Earned Value Management"}, "wbsconfiguration": {"title": "Wbsconfiguration", "type": "string"}}, "required": ["name", "description", "customer", "owner", "manager", "sales_stage", "proposal_currency", "wbsconfiguration"], "title": "AddProposal", "type": "object"}, "OrgProposalDetails": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "funnel": {"title": "Funnel", "type": "string"}, "stage": {"title": "Stage", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "internal_costs": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Internal Costs", "type": "string"}, "external_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "External Value", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "owner_name": {"title": "Owner Name", "type": "string"}, "pricing_strategy": {"title": "Pricing Strategy", "type": "string"}, "pricing_adjustment_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pricing Adjustment Percent"}, "pricing_adjustment_amount": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pricing Adjustment Amount"}, "target_margin_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Target Margin Percent"}, "minimum_margin_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Minimum Margin Percent"}, "customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Id"}, "funnel_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Funnel Id"}, "stage_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Stage Id"}, "currency_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency Code"}, "days_in_stage": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days In Stage"}, "stage_sequence_no": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Stage Sequence No"}, "moves": {"default": [], "items": {"$ref": "#/components/schemas/ProposalMove"}, "title": "Moves", "type": "array"}, "booking_management_enabled": {"default": false, "title": "Booking Management Enabled", "type": "boolean"}, "origin": {"default": "staff", "title": "Origin", "type": "string"}, "requested_by_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Requested By Name"}, "customer_location_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Location Name"}, "customer_reference": {"default": "", "title": "Customer Reference", "type": "string"}, "portal_reference": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Portal Reference"}, "customer_asset_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Asset Name"}, "wanted_by": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Wanted By"}}, "required": ["id", "name", "description", "funnel", "stage", "stage_type", "created_at", "internal_costs", "external_value", "currency", "currency_symbol", "owner_name", "pricing_strategy"], "title": "OrgProposalDetails", "type": "object"}, "ProposalMove": {"description": "A stage a proposal may move to next, per FunnelStage.MOVES. `instructions` is what the stage asks\nthe mover to confirm having done, empty when it asks nothing. `sequence_no` is the stage's place in its\nfunnel, so a client can tell a step forward from a step back.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "instructions": {"default": "", "title": "Instructions", "type": "string"}, "sequence_no": {"default": 0, "title": "Sequence No", "type": "integer"}}, "required": ["id", "name", "stage_type"], "title": "ProposalMove", "type": "object"}, "ProposalHistoryEntry": {"description": "Single entry in a proposal's unified timeline.", "properties": {"kind": {"enum": ["stage", "lifecycle"], "title": "Kind", "type": "string"}, "name": {"title": "Name", "type": "string"}, "type": {"title": "Type", "type": "string"}, "entry_datetime": {"format": "date-time", "title": "Entry Datetime", "type": "string"}, "exit_datetime": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Exit Datetime"}, "duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Days"}, "duration_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Hours"}, "member_name": {"title": "Member Name", "type": "string"}, "member_email": {"title": "Member Email", "type": "string"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}, "is_current": {"title": "Is Current", "type": "boolean"}}, "required": ["kind", "name", "type", "entry_datetime", "exit_datetime", "duration_days", "duration_hours", "member_name", "member_email", "note", "is_current"], "title": "ProposalHistoryEntry", "type": "object"}, "ProposalHistoryOutput": {"description": "Complete history for a proposal", "properties": {"proposal_id": {"title": "Proposal Id", "type": "string"}, "proposal_name": {"title": "Proposal Name", "type": "string"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "current_stage": {"title": "Current Stage", "type": "string"}, "history": {"items": {"$ref": "#/components/schemas/ProposalHistoryEntry"}, "title": "History", "type": "array"}, "total_duration_days": {"title": "Total Duration Days", "type": "integer"}}, "required": ["proposal_id", "proposal_name", "customer_name", "current_stage", "history", "total_duration_days"], "title": "ProposalHistoryOutput", "type": "object"}, "ProductStatusHistoryEntry": {"description": "Single history entry for a product status - tracks time spent in each status", "properties": {"status_name": {"title": "Status Name", "type": "string"}, "status_type": {"title": "Status Type", "type": "string"}, "entry_datetime": {"format": "date-time", "title": "Entry Datetime", "type": "string"}, "exit_datetime": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Exit Datetime"}, "duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Days"}, "duration_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Hours"}, "member_name": {"title": "Member Name", "type": "string"}, "member_email": {"title": "Member Email", "type": "string"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}, "is_current": {"title": "Is Current", "type": "boolean"}}, "required": ["status_name", "status_type", "entry_datetime", "exit_datetime", "duration_days", "duration_hours", "member_name", "member_email", "note", "is_current"], "title": "ProductStatusHistoryEntry", "type": "object"}, "ProductStatusHistoryOutput": {"description": "Complete status history for a product", "properties": {"product_id": {"title": "Product Id", "type": "string"}, "product_name": {"title": "Product Name", "type": "string"}, "history": {"items": {"$ref": "#/components/schemas/ProductStatusHistoryEntry"}, "title": "History", "type": "array"}, "total_duration_days": {"title": "Total Duration Days", "type": "integer"}}, "required": ["product_id", "product_name", "history", "total_duration_days"], "title": "ProductStatusHistoryOutput", "type": "object"}, "OutputProposalList": {"properties": {"proposals": {"items": {"$ref": "#/components/schemas/ProposalListItem"}, "title": "Proposals", "type": "array"}, "node_type": {"title": "Node Type", "type": "string"}, "node_id": {"title": "Node Id", "type": "string"}, "node_name": {"title": "Node Name", "type": "string"}, "total_internal_cost": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Internal Cost", "type": "string"}, "total_external_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total External Value", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "empty_message": {"title": "Empty Message", "type": "string"}, "total_count": {"title": "Total Count", "type": "integer"}}, "required": ["proposals", "node_type", "node_id", "node_name", "total_internal_cost", "total_external_value", "currency", "currency_symbol", "empty_message", "total_count"], "title": "OutputProposalList", "type": "object"}, "ProposalListItem": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "funnel": {"title": "Funnel", "type": "string"}, "stage": {"title": "Stage", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "internal_costs": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Internal Costs", "type": "string"}, "external_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "External Value", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "tenant_path": {"title": "Tenant Path", "type": "string"}, "tags": {"default": [], "items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}}, "required": ["id", "name", "funnel", "stage", "created_at", "updated_at", "internal_costs", "external_value", "currency", "currency_symbol", "tenant_path"], "title": "ProposalListItem", "type": "object"}, "MyPipelineFunnel": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "values": {"items": {"$ref": "#/components/schemas/MyPipelineMoney"}, "title": "Values", "type": "array"}, "stages": {"items": {"$ref": "#/components/schemas/MyPipelineStage"}, "title": "Stages", "type": "array"}}, "required": ["id", "name", "count", "values", "stages"], "title": "MyPipelineFunnel", "type": "object"}, "MyPipelineMoney": {"description": "One currency's sum. Pipelines are never summed across currencies.", "properties": {"currency": {"title": "Currency", "type": "string"}, "symbol": {"title": "Symbol", "type": "string"}, "value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Value", "type": "string"}}, "required": ["currency", "symbol", "value"], "title": "MyPipelineMoney", "type": "object"}, "MyPipelineStage": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "values": {"items": {"$ref": "#/components/schemas/MyPipelineMoney"}, "title": "Values", "type": "array"}}, "required": ["id", "name", "stage_type", "count", "values"], "title": "MyPipelineStage", "type": "object"}, "OutputMyPipeline": {"description": "The caller's own open proposals, per active funnel and open stage, empty stages included.", "properties": {"funnels": {"items": {"$ref": "#/components/schemas/MyPipelineFunnel"}, "title": "Funnels", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}}, "required": ["funnels", "total_count"], "title": "OutputMyPipeline", "type": "object"}, "StageProposals": {"properties": {"proposals": {"items": {"$ref": "#/components/schemas/ProposalDetail"}, "title": "Proposals", "type": "array"}}, "required": ["proposals"], "title": "StageProposals", "type": "object"}, "EditProposal": {"properties": {"internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "customer": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Customer", "type": "string"}, "rfp_publication": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Rfp Publication"}, "customer_location": {"anyOf": [{"pattern": "^([0-9a-f]{32})?$", "type": "string"}, {"type": "null"}], "title": "Customer Location"}, "customer_asset": {"anyOf": [{"pattern": "^([0-9a-f]{32})?$", "type": "string"}, {"type": "null"}], "title": "Customer Asset"}, "owner": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Owner", "type": "string"}, "proposal_currency": {"maxLength": 3, "minLength": 3, "title": "Proposal Currency", "type": "string"}, "pricing_strategy": {"anyOf": [{"enum": ["product_prices", "percentage", "fixed_amount", "margin_target"], "type": "string"}, {"type": "null"}], "default": "product_prices", "title": "Pricing Strategy"}, "pricing_adjustment_percent": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "0.00", "title": "Pricing Adjustment Percent"}, "pricing_adjustment_amount": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "0.00", "title": "Pricing Adjustment Amount"}, "target_margin_percent": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "30.00", "title": "Target Margin Percent"}, "minimum_margin_percent": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "20.00", "title": "Minimum Margin Percent"}, "proposal_valid_since": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Valid Since"}, "proposal_valid_until": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Valid Until"}, "project_start_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Start Date"}, "project_end_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project End Date"}, "project_enable_booking_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Booking Management"}, "project_enable_resource_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Resource Management"}, "project_enable_effort_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Effort Management"}, "project_enable_financial_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Financial Management"}, "project_enable_schedule_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Schedule Management"}, "project_enable_earned_value_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Earned Value Management"}, "wbsconfiguration": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbsconfiguration"}}, "required": ["name", "description", "customer", "owner", "proposal_currency"], "title": "EditProposal", "type": "object"}, "ChangeProposalStage": {"properties": {"i_have_followed_the_instructions": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "I Have Followed The Instructions"}, "contact_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Contact Id"}, "rejection_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Rejection Reason"}}, "title": "ChangeProposalStage", "type": "object"}, "AcceptPortalOrder": {"description": "Input schema for the supplier accepting an order a customer placed in the portal", "properties": {"confirmation": {"title": "Confirmation", "type": "boolean"}}, "required": ["confirmation"], "title": "AcceptPortalOrder", "type": "object"}, "MarkPortalOrderDelivered": {"description": "Input schema for the supplier marking a whole portal order delivered", "properties": {"confirmation": {"title": "Confirmation", "type": "boolean"}}, "required": ["confirmation"], "title": "MarkPortalOrderDelivered", "type": "object"}, "RejectPortalOrder": {"description": "Input schema for the supplier rejecting a portal order; the customer reads the reason", "properties": {"reason": {"maxLength": 2000, "minLength": 3, "title": "Reason", "type": "string"}}, "required": ["reason"], "title": "RejectPortalOrder", "type": "object"}, "ProductStatusDetail": {"description": "Product status for lifecycle display.\nUsed in status dropdowns to show current status and all available lifecycle stages.\nUse lifecycle_type with templatetags for styling (status_bg, status_text, status_icon, etc.)", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "lifecycle_type": {"title": "Lifecycle Type", "type": "string"}, "lifecycle_type_display": {"title": "Lifecycle Type Display", "type": "string"}, "visible_to_customer": {"title": "Visible To Customer", "type": "boolean"}, "sequence_no": {"title": "Sequence No", "type": "integer"}, "is_current": {"title": "Is Current", "type": "boolean"}}, "required": ["id", "name", "lifecycle_type", "lifecycle_type_display", "visible_to_customer", "sequence_no", "is_current"], "title": "ProductStatusDetail", "type": "object"}, "ProposalProduct": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "description_for_customer": {"default": "", "title": "Description For Customer", "type": "string"}, "planned_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned End"}, "product_type": {"title": "Product Type", "type": "string"}, "pricing_type": {"title": "Pricing Type", "type": "string"}, "pricing_type_display": {"title": "Pricing Type Display", "type": "string"}, "pricing_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Pricing Value", "type": "string"}, "pricing_currency": {"title": "Pricing Currency", "type": "string"}, "pricing_currency_symbol": {"title": "Pricing Currency Symbol", "type": "string"}, "product_count": {"title": "Product Count", "type": "integer"}, "origin": {"default": "staff", "title": "Origin", "type": "string"}, "unit_of_measure": {"default": "", "title": "Unit Of Measure", "type": "string"}, "total_price": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Price", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "catalog_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Catalog Name"}, "catalog_internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Catalog Internal Code"}, "image_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Image Url"}, "is_linked": {"default": false, "title": "Is Linked", "type": "boolean"}, "proposal_currency_symbol": {"default": "", "title": "Proposal Currency Symbol", "type": "string"}, "margin_currency_symbol": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Margin Currency Symbol"}, "proposal_currency": {"default": "", "title": "Proposal Currency", "type": "string"}, "margin_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Margin Currency"}, "cost_percentage": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Cost Percentage"}, "original_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Original Value", "type": "string"}, "original_currency": {"title": "Original Currency", "type": "string"}, "is_converted": {"title": "Is Converted", "type": "boolean"}, "exchange_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Exchange Rate"}, "cost_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Cost Value"}, "cost_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cost Currency"}, "proposal_cost": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Proposal Cost"}, "margin_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Margin Percent"}, "total_margin": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Margin"}, "total_cost": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Cost"}, "current_status": {"$ref": "#/components/schemas/ProductStatusDetail"}, "lifecycle_statuses": {"items": {"$ref": "#/components/schemas/ProductStatusDetail"}, "title": "Lifecycle Statuses", "type": "array"}}, "required": ["id", "name", "description", "product_type", "pricing_type", "pricing_type_display", "pricing_value", "pricing_currency", "pricing_currency_symbol", "product_count", "total_price", "is_active", "created_at", "original_value", "original_currency", "is_converted", "current_status", "lifecycle_statuses"], "title": "ProposalProduct", "type": "object"}, "ProposalProductSummary": {"properties": {"total_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Value", "type": "string"}, "total_cost": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Cost", "type": "string"}, "total_customer_price": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Customer Price", "type": "string"}, "total_profit": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Profit", "type": "string"}, "total_margin_amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Margin Amount", "type": "string"}, "total_margin_percent": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Margin Percent", "type": "string"}, "total_value_symbol": {"title": "Total Value Symbol", "type": "string"}, "total_currency": {"title": "Total Currency", "type": "string"}, "product_count": {"title": "Product Count", "type": "integer"}, "active_product_count": {"title": "Active Product Count", "type": "integer"}, "total_items": {"title": "Total Items", "type": "integer"}, "avg_product_value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Avg Product Value", "type": "string"}, "avg_product_cost": {"default": "0.00", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Avg Product Cost", "type": "string"}, "pricing_types_count": {"title": "Pricing Types Count", "type": "integer"}, "products_by_cost": {"items": {"$ref": "#/components/schemas/ProposalProduct"}, "title": "Products By Cost", "type": "array"}, "all_converted": {"title": "All Converted", "type": "boolean"}, "has_mixed_currencies": {"title": "Has Mixed Currencies", "type": "boolean"}, "warning_message": {"title": "Warning Message", "type": "string"}}, "required": ["total_value", "total_cost", "total_customer_price", "total_profit", "total_margin_amount", "total_margin_percent", "total_value_symbol", "total_currency", "product_count", "active_product_count", "total_items", "avg_product_value", "pricing_types_count", "products_by_cost", "all_converted", "has_mixed_currencies", "warning_message"], "title": "ProposalProductSummary", "type": "object"}, "ProposalProducts": {"properties": {"products": {"items": {"$ref": "#/components/schemas/ProposalProduct"}, "title": "Products", "type": "array"}, "proposal": {"additionalProperties": true, "title": "Proposal", "type": "object"}, "proposal_summary": {"$ref": "#/components/schemas/ProposalProductSummary"}, "is_locked": {"title": "Is Locked", "type": "boolean"}}, "required": ["products", "proposal", "proposal_summary", "is_locked"], "title": "ProposalProducts", "type": "object"}, "EditProduct": {"properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "description_for_customer": {"title": "Description For Customer", "type": "string"}, "product_type": {"enum": ["good", "service", "bundle"], "title": "Product Type", "type": "string"}, "pricing_type": {"enum": ["fixed_price", "time_and_materials", "hourly_rate", "per_unit", "subscription_per_month", "subscription_per_year"], "title": "Pricing Type", "type": "string"}, "pricing_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pricing Value"}, "pricing_currency": {"maxLength": 3, "minLength": 3, "title": "Pricing Currency", "type": "string"}, "cost_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Cost Value"}, "cost_currency": {"anyOf": [{"maxLength": 3, "minLength": 3, "type": "string"}, {"type": "null"}], "title": "Cost Currency"}, "product_count": {"default": 1, "title": "Product Count", "type": "integer"}, "planned_start": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned End"}, "tracks_project": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Tracks Project"}}, "required": ["name", "description", "description_for_customer", "product_type", "pricing_type", "pricing_currency"], "title": "EditProduct", "type": "object"}, "ChangeProductStatus": {"properties": {"reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reason"}}, "title": "ChangeProductStatus", "type": "object"}, "ProductStatusBadges": {"description": "Product status badges for dynamic updates", "properties": {"product_id": {"title": "Product Id", "type": "string"}, "product_name": {"title": "Product Name", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "current_status": {"$ref": "#/components/schemas/ProductStatusDetail"}, "lifecycle_statuses": {"items": {"$ref": "#/components/schemas/ProductStatusDetail"}, "title": "Lifecycle Statuses", "type": "array"}}, "required": ["product_id", "product_name", "is_active", "current_status", "lifecycle_statuses"], "title": "ProductStatusBadges", "type": "object"}, "ProductMenuItems": {"description": "Product menu items for dynamic updates", "properties": {"product_id": {"title": "Product Id", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "status_transitions": {"default": [], "items": {"$ref": "#/components/schemas/ProductStatusTransition"}, "title": "Status Transitions", "type": "array"}, "lifecycle_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lifecycle Name"}, "current_status_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Current Status Name"}}, "required": ["product_id", "is_active"], "title": "ProductMenuItems", "type": "object"}, "ProductStatusTransition": {"description": "A status transition option for the product menu", "properties": {"status_id": {"title": "Status Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "lifecycle_type": {"title": "Lifecycle Type", "type": "string"}}, "required": ["status_id", "name", "lifecycle_type"], "title": "ProductStatusTransition", "type": "object"}, "AddProductFromCatalog": {"properties": {"proposal_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Proposal Id", "type": "string"}, "catalog_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Catalog Id", "type": "string"}, "product_count": {"default": 1, "title": "Product Count", "type": "integer"}}, "required": ["proposal_id", "catalog_id"], "title": "AddProductFromCatalog", "type": "object"}, "AddCustomProduct": {"properties": {"proposal_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Proposal Id", "type": "string"}, "name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "description_for_customer": {"title": "Description For Customer", "type": "string"}, "product_type": {"enum": ["good", "service", "bundle"], "title": "Product Type", "type": "string"}, "lifecycle": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Lifecycle", "type": "string"}, "pricing_type": {"enum": ["fixed_price", "time_and_materials", "hourly_rate", "per_unit", "subscription_per_month", "subscription_per_year"], "title": "Pricing Type", "type": "string"}, "pricing_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pricing Value"}, "pricing_currency": {"maxLength": 3, "minLength": 3, "title": "Pricing Currency", "type": "string"}, "cost_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Cost Value"}, "cost_currency": {"maxLength": 3, "minLength": 3, "title": "Cost Currency", "type": "string"}, "product_count": {"default": 1, "title": "Product Count", "type": "integer"}, "planned_start": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned End"}, "tracks_project": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Tracks Project"}}, "required": ["proposal_id", "name", "description", "description_for_customer", "product_type", "lifecycle", "pricing_type", "pricing_currency", "cost_value", "cost_currency"], "title": "AddCustomProduct", "type": "object"}, "OutputPaymentScheduleBlocks": {"properties": {"blocks": {"items": {"$ref": "#/components/schemas/PaymentScheduleBlockDetail"}, "title": "Blocks", "type": "array"}, "summary": {"$ref": "#/components/schemas/PaymentScheduleSummary"}, "proposal_id": {"title": "Proposal Id", "type": "string"}, "proposal_sent": {"title": "Proposal Sent", "type": "boolean"}, "can_edit": {"title": "Can Edit", "type": "boolean"}, "is_locked": {"title": "Is Locked", "type": "boolean"}}, "required": ["blocks", "summary", "proposal_id", "proposal_sent", "can_edit", "is_locked"], "title": "OutputPaymentScheduleBlocks", "type": "object"}, "PaymentScheduleBlockAmount": {"description": "One currency's share of a block. A payment keeps the currency it was created in, so a block whose\nproposal changed currency can hold two, and they are never added together.", "properties": {"currency": {"title": "Currency", "type": "string"}, "symbol": {"title": "Symbol", "type": "string"}, "total": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total", "type": "string"}, "paid": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Paid", "type": "string"}}, "required": ["currency", "symbol", "total", "paid"], "title": "PaymentScheduleBlockAmount", "type": "object"}, "PaymentScheduleBlockDetail": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "payment_type": {"title": "Payment Type", "type": "string"}, "payment_type_display": {"title": "Payment Type Display", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "sequence_no": {"title": "Sequence No", "type": "integer"}, "project_id": {"title": "Project Id", "type": "string"}, "payment_count": {"default": 0, "title": "Payment Count", "type": "integer"}, "amounts": {"default": [], "items": {"$ref": "#/components/schemas/PaymentScheduleBlockAmount"}, "title": "Amounts", "type": "array"}, "next_due_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Next Due Date"}}, "required": ["id", "name", "description", "payment_type", "payment_type_display", "sequence_no", "project_id"], "title": "PaymentScheduleBlockDetail", "type": "object"}, "PaymentScheduleSummary": {"properties": {"total_blocks": {"title": "Total Blocks", "type": "integer"}, "upfront_payments": {"title": "Upfront Payments", "type": "integer"}, "milestone_payments": {"title": "Milestone Payments", "type": "integer"}, "progress_payments": {"title": "Progress Payments", "type": "integer"}, "completion_payments": {"title": "Completion Payments", "type": "integer"}, "consumption_payments": {"title": "Consumption Payments", "type": "integer"}}, "required": ["total_blocks", "upfront_payments", "milestone_payments", "progress_payments", "completion_payments", "consumption_payments"], "title": "PaymentScheduleSummary", "type": "object"}, "AddPaymentScheduleBlock": {"properties": {"name": {"maxLength": 50, "minLength": 1, "title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "payment_type": {"enum": ["upfront_payment", "milestone_payment", "progress_payment", "upon_completion", "consumption"], "title": "Payment Type", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "sequence_no": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Sequence No"}}, "required": ["name", "description", "payment_type"], "title": "AddPaymentScheduleBlock", "type": "object"}, "EditPaymentScheduleBlock": {"properties": {"name": {"anyOf": [{"maxLength": 50, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Name"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "payment_type": {"anyOf": [{"enum": ["upfront_payment", "milestone_payment", "progress_payment", "upon_completion", "consumption"], "type": "string"}, {"type": "null"}], "title": "Payment Type"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "sequence_no": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Sequence No"}}, "title": "EditPaymentScheduleBlock", "type": "object"}, "ReorderPaymentScheduleBlocks": {"properties": {"block_sequences": {"items": {"additionalProperties": true, "type": "object"}, "title": "Block Sequences", "type": "array"}}, "required": ["block_sequences"], "title": "ReorderPaymentScheduleBlocks", "type": "object"}, "BlockPaymentsSummary": {"properties": {"total_amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Amount", "type": "string"}, "paid_amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Paid Amount", "type": "string"}, "unpaid_amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Unpaid Amount", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "currency_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency Code"}, "payment_count": {"title": "Payment Count", "type": "integer"}, "paid_count": {"title": "Paid Count", "type": "integer"}, "unpaid_count": {"title": "Unpaid Count", "type": "integer"}, "next_due_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Next Due Date"}}, "required": ["total_amount", "paid_amount", "unpaid_amount", "currency_symbol", "payment_count", "paid_count", "unpaid_count"], "title": "BlockPaymentsSummary", "type": "object"}, "OutputBlockPayments": {"properties": {"payments": {"items": {"$ref": "#/components/schemas/PaymentDetail"}, "title": "Payments", "type": "array"}, "summary": {"$ref": "#/components/schemas/BlockPaymentsSummary"}, "block_id": {"title": "Block Id", "type": "string"}, "block_name": {"title": "Block Name", "type": "string"}, "block_type": {"title": "Block Type", "type": "string"}, "proposal_currency": {"title": "Proposal Currency", "type": "string"}, "can_edit": {"title": "Can Edit", "type": "boolean"}, "is_closed_won": {"title": "Is Closed Won", "type": "boolean"}}, "required": ["payments", "summary", "block_id", "block_name", "block_type", "proposal_currency", "can_edit", "is_closed_won"], "title": "OutputBlockPayments", "type": "object"}, "PaymentDetail": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "due_date": {"format": "date", "title": "Due Date", "type": "string"}, "amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Amount", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "currency_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency Code"}, "paid": {"title": "Paid", "type": "boolean"}, "paid_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Paid Date"}, "payment_integration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Payment Integration Id"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "product_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Name"}, "block_id": {"title": "Block Id", "type": "string"}, "block_name": {"title": "Block Name", "type": "string"}, "block_type": {"title": "Block Type", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "show_sources": {"default": true, "title": "Show Sources", "type": "boolean"}, "sources": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Sources", "type": "array"}}, "required": ["id", "name", "due_date", "amount", "currency_symbol", "paid", "block_id", "block_name", "block_type", "project_id"], "title": "PaymentDetail", "type": "object"}, "AddPayment": {"properties": {"payment_schedule_block_id": {"title": "Payment Schedule Block Id", "type": "string"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "name": {"maxLength": 50, "minLength": 1, "title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"maxLength": 255, "type": "string"}, {"type": "null"}], "title": "Internal Code"}, "due_date": {"title": "Due Date", "type": "string"}, "amount": {"anyOf": [{"minimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "default": "0", "title": "Amount"}, "payment_integration_id": {"anyOf": [{"maxLength": 255, "type": "string"}, {"type": "null"}], "title": "Payment Integration Id"}, "show_sources": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Show Sources"}}, "required": ["payment_schedule_block_id", "name", "due_date"], "title": "AddPayment", "type": "object"}, "EditPayment": {"properties": {"name": {"anyOf": [{"maxLength": 50, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Name"}, "internal_code": {"anyOf": [{"maxLength": 255, "type": "string"}, {"type": "null"}], "title": "Internal Code"}, "due_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Due Date"}, "amount": {"anyOf": [{"minimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Amount"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "payment_integration_id": {"anyOf": [{"maxLength": 255, "type": "string"}, {"type": "null"}], "title": "Payment Integration Id"}, "show_sources": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Show Sources"}}, "title": "EditPayment", "type": "object"}, "MarkPaymentPaid": {"properties": {"paid_date": {"title": "Paid Date", "type": "string"}, "payment_integration_id": {"anyOf": [{"maxLength": 255, "type": "string"}, {"type": "null"}], "title": "Payment Integration Id"}}, "required": ["paid_date"], "title": "MarkPaymentPaid", "type": "object"}, "OutputBillableSource": {"description": "One eligible source row in the picker (a closed ExternalSupportRequest or\na finished OperationalWorkItem in a final stage).", "properties": {"external_id": {"title": "External Id", "type": "string"}, "label": {"title": "Label", "type": "string"}, "reference_date": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Reference Date"}, "suggested_amount": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Suggested Amount"}}, "required": ["external_id", "label"], "title": "OutputBillableSource", "type": "object"}, "OutputBillableSourceList": {"description": "Payload for the per-source-type picker list endpoints.", "properties": {"sources": {"items": {"$ref": "#/components/schemas/OutputBillableSource"}, "title": "Sources", "type": "array"}, "payment_id": {"title": "Payment Id", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}}, "required": ["sources", "payment_id", "currency_symbol"], "title": "OutputBillableSourceList", "type": "object"}, "AddBillableSourceEntry": {"properties": {"source_external_id": {"title": "Source External Id", "type": "string"}, "amount": {"anyOf": [{"exclusiveMinimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Amount"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Notes"}}, "required": ["source_external_id", "amount"], "title": "AddBillableSourceEntry", "type": "object"}, "AddExternalSupportRequestsToPayment": {"properties": {"entries": {"items": {"$ref": "#/components/schemas/AddBillableSourceEntry"}, "title": "Entries", "type": "array"}}, "required": ["entries"], "title": "AddExternalSupportRequestsToPayment", "type": "object"}, "AddOperationalWorkItemsToPayment": {"properties": {"entries": {"items": {"$ref": "#/components/schemas/AddBillableSourceEntry"}, "title": "Entries", "type": "array"}}, "required": ["entries"], "title": "AddOperationalWorkItemsToPayment", "type": "object"}, "EditPaymentSource": {"properties": {"amount": {"anyOf": [{"exclusiveMinimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Amount"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Notes"}}, "required": ["amount"], "title": "EditPaymentSource", "type": "object"}, "PaymentFlowChartData": {"description": "Data for payment flow visualization", "properties": {"payments": {"items": {"additionalProperties": true, "type": "object"}, "title": "Payments", "type": "array"}, "dates": {"items": {"type": "string"}, "title": "Dates", "type": "array"}, "paid_payments": {"items": {"additionalProperties": true, "type": "object"}, "title": "Paid Payments", "type": "array"}, "unpaid_payments": {"items": {"additionalProperties": true, "type": "object"}, "title": "Unpaid Payments", "type": "array"}, "cumulative_expected": {"items": {"additionalProperties": true, "type": "object"}, "title": "Cumulative Expected", "type": "array"}, "cumulative_paid": {"items": {"additionalProperties": true, "type": "object"}, "title": "Cumulative Paid", "type": "array"}, "summary": {"additionalProperties": true, "title": "Summary", "type": "object"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}}, "required": ["payments", "dates", "paid_payments", "unpaid_payments", "cumulative_expected", "cumulative_paid", "summary", "currency_symbol"], "title": "PaymentFlowChartData", "type": "object"}, "PaymentCumulativeChartData": {"description": "Data for cumulative payment flow chart", "properties": {"cumulative_expected": {"items": {"additionalProperties": true, "type": "object"}, "title": "Cumulative Expected", "type": "array"}, "cumulative_paid": {"items": {"additionalProperties": true, "type": "object"}, "title": "Cumulative Paid", "type": "array"}, "summary": {"additionalProperties": true, "title": "Summary", "type": "object"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "currency_code": {"title": "Currency Code", "type": "string"}}, "required": ["cumulative_expected", "cumulative_paid", "summary", "currency_symbol", "currency_code"], "title": "PaymentCumulativeChartData", "type": "object"}, "PaymentStatusChartData": {"description": "Data for payment status breakdown chart", "properties": {"paid_payments": {"items": {"additionalProperties": true, "type": "object"}, "title": "Paid Payments", "type": "array"}, "unpaid_payments": {"items": {"additionalProperties": true, "type": "object"}, "title": "Unpaid Payments", "type": "array"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "currency_code": {"title": "Currency Code", "type": "string"}}, "required": ["paid_payments", "unpaid_payments", "currency_symbol", "currency_code"], "title": "PaymentStatusChartData", "type": "object"}, "ProposalWorkSchedule": {"properties": {"products": {"items": {"$ref": "#/components/schemas/WorkScheduleItem"}, "title": "Products", "type": "array"}}, "required": ["products"], "title": "ProposalWorkSchedule", "type": "object"}, "WorkScheduleItem": {"properties": {"product_id": {"title": "Product Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "planned_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned End"}, "duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Days"}, "is_asap": {"title": "Is Asap", "type": "boolean"}, "work_templates": {"anyOf": [{"items": {"$ref": "#/components/schemas/WorkTemplate"}, "type": "array"}, {"type": "null"}], "title": "Work Templates"}, "total_template_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Total Template Hours"}}, "required": ["product_id", "name", "is_asap"], "title": "WorkScheduleItem", "type": "object"}, "OutputProposalPreview": {"description": "Proposal preview with full proposal details for customer presentation", "properties": {"company": {"additionalProperties": true, "title": "Company", "type": "object"}, "customer": {"additionalProperties": true, "title": "Customer", "type": "object"}, "header": {"additionalProperties": true, "title": "Header", "type": "object"}, "executive_summary": {"additionalProperties": true, "title": "Executive Summary", "type": "object"}, "products": {"items": {"additionalProperties": true, "type": "object"}, "title": "Products", "type": "array"}, "has_product_pictures": {"default": false, "title": "Has Product Pictures", "type": "boolean"}, "payment_schedule": {"items": {"additionalProperties": true, "type": "object"}, "title": "Payment Schedule", "type": "array"}, "investment_summary": {"additionalProperties": true, "title": "Investment Summary", "type": "object"}, "terms_conditions": {"additionalProperties": true, "title": "Terms Conditions", "type": "object"}, "acceptance_info": {"additionalProperties": true, "title": "Acceptance Info", "type": "object"}, "generated_at": {"format": "date-time", "title": "Generated At", "type": "string"}, "tenant_path": {"title": "Tenant Path", "type": "string"}, "proposal_id": {"title": "Proposal Id", "type": "string"}, "customer_org_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Org Id"}}, "required": ["company", "customer", "header", "executive_summary", "products", "payment_schedule", "investment_summary", "terms_conditions", "acceptance_info", "generated_at", "tenant_path", "proposal_id"], "title": "OutputProposalPreview", "type": "object"}, "OutputProjectsList": {"description": "List of active projects (closed_won stage)", "properties": {"projects": {"items": {"$ref": "#/components/schemas/ProjectListItem"}, "title": "Projects", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}}, "required": ["projects", "total_count"], "title": "OutputProjectsList", "type": "object"}, "ProjectListItem": {"description": "Individual project item for lists", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "stage_name": {"title": "Stage Name", "type": "string"}, "stage_id": {"title": "Stage Id", "type": "string"}, "product_count": {"title": "Product Count", "type": "integer"}, "project_start_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Project Start Date"}, "project_end_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Project End Date"}, "owner_name": {"title": "Owner Name", "type": "string"}, "owner_id": {"title": "Owner Id", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "tags": {"default": [], "items": {"$ref": "#/components/schemas/OutputTag"}, "title": "Tags", "type": "array"}}, "required": ["id", "name", "stage_name", "stage_id", "product_count", "owner_name", "owner_id", "created_at", "updated_at"], "title": "ProjectListItem", "type": "object"}, "ProjectProductSimple": {"properties": {"external_id": {"title": "External Id", "type": "string"}, "product_count": {"title": "Product Count", "type": "integer"}, "name": {"title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "description_for_customer": {"default": "", "title": "Description For Customer", "type": "string"}, "planned_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned End"}, "is_active": {"title": "Is Active", "type": "boolean"}, "current_status": {"$ref": "#/components/schemas/ProductStatusDetail"}, "lifecycle_statuses": {"items": {"$ref": "#/components/schemas/ProductStatusDetail"}, "title": "Lifecycle Statuses", "type": "array"}, "is_linked": {"default": false, "title": "Is Linked", "type": "boolean"}}, "required": ["external_id", "product_count", "name", "is_active", "current_status", "lifecycle_statuses"], "title": "ProjectProductSimple", "type": "object"}, "ProjectProducts": {"properties": {"products": {"items": {"$ref": "#/components/schemas/ProjectProductSimple"}, "title": "Products", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}}, "required": ["products", "project_id"], "title": "ProjectProducts", "type": "object"}, "ProjectWBSConfig": {"properties": {"project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "wbs_config": {"anyOf": [{"$ref": "#/components/schemas/WBSConfigDetail"}, {"type": "null"}]}, "has_work_items": {"default": false, "title": "Has Work Items", "type": "boolean"}}, "required": ["project_id", "project_name"], "title": "ProjectWBSConfig", "type": "object"}, "WBSConfigDetail": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}}, "required": ["id", "name"], "title": "WBSConfigDetail", "type": "object"}, "UpdateProjectWBS": {"description": "Input schema for updating a project's WBS configuration", "properties": {"wbsconfiguration": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Wbsconfiguration", "type": "string"}}, "required": ["wbsconfiguration"], "title": "UpdateProjectWBS", "type": "object"}, "EditProject": {"properties": {"internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "manager": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Manager", "type": "string"}, "project_start_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Start Date"}, "project_end_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project End Date"}, "project_enable_booking_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Booking Management"}, "project_enable_resource_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Resource Management"}, "project_enable_effort_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Effort Management"}, "project_enable_financial_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Financial Management"}, "project_enable_schedule_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Schedule Management"}, "project_enable_earned_value_management": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Project Enable Earned Value Management"}}, "required": ["name", "description", "manager"], "title": "EditProject", "type": "object"}, "CancelProject": {"properties": {"cancellation_reason": {"maxLength": 2000, "minLength": 1, "title": "Cancellation Reason", "type": "string"}}, "required": ["cancellation_reason"], "title": "CancelProject", "type": "object"}, "AllowedChildType": {"description": "Work item type that can be added as a child based on WBS rules", "properties": {"work_item_type_id": {"title": "Work Item Type Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}}, "required": ["work_item_type_id", "name", "scheduling_behaviour"], "title": "AllowedChildType", "type": "object"}, "OutputProjectWorkItems": {"description": "Complete work items hierarchy with configuration info", "properties": {"project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "wbs_configuration_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbs Configuration Id"}, "wbs_configuration_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbs Configuration Name"}, "has_wbs_configuration": {"title": "Has Wbs Configuration", "type": "boolean"}, "root_work_item_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Work Item Id"}, "parent_work_item_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Work Item Id"}, "parent_work_item_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Work Item Name"}, "parent_work_item_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Work Item Type"}, "top_level_types": {"default": [], "items": {"$ref": "#/components/schemas/TopLevelWorkItemType"}, "title": "Top Level Types", "type": "array"}, "work_items": {"additionalProperties": {"$ref": "#/components/schemas/WorkItemNode"}, "default": {}, "title": "Work Items", "type": "object"}, "total_items": {"default": 0, "title": "Total Items", "type": "integer"}}, "required": ["project_id", "project_name", "has_wbs_configuration"], "title": "OutputProjectWorkItems", "type": "object"}, "TopLevelWorkItemType": {"description": "Info about work item types that can be added at the top level", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}}, "required": ["external_id", "name", "scheduling_behaviour"], "title": "TopLevelWorkItemType", "type": "object"}, "WorkItemNode": {"description": "Single work item in the hierarchy", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}, "item_type_id": {"title": "Item Type Id", "type": "string"}, "item_type_name": {"title": "Item Type Name", "type": "string"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}, "is_finished": {"title": "Is Finished", "type": "boolean"}, "is_accepted": {"title": "Is Accepted", "type": "boolean"}, "estimated_work_hours": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Estimated Work Hours"}, "owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Id"}, "owner_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Name"}, "planned_start": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned End"}, "children": {"additionalProperties": {"$ref": "#/components/schemas/WorkItemNode"}, "default": {}, "title": "Children", "type": "object"}, "add_children": {"default": [], "items": {"$ref": "#/components/schemas/AllowedChildType"}, "title": "Add Children", "type": "array"}}, "required": ["external_id", "name", "hierarchy_id", "item_type_id", "item_type_name", "scheduling_behaviour", "is_finished", "is_accepted"], "title": "WorkItemNode", "type": "object"}, "KeyProjectActivityItem": {"description": "Single activity item in key project activities list", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}, "is_finished": {"title": "Is Finished", "type": "boolean"}, "percent_complete": {"title": "Percent Complete", "type": "integer"}}, "required": ["id", "name", "hierarchy_id", "is_finished", "percent_complete"], "title": "KeyProjectActivityItem", "type": "object"}, "OutputKeyProjectActivities": {"description": "List of key project activities based on schedule management setting", "properties": {"activities": {"items": {"$ref": "#/components/schemas/KeyProjectActivityItem"}, "title": "Activities", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "total_activities": {"title": "Total Activities", "type": "integer"}, "schedule_mode": {"title": "Schedule Mode", "type": "boolean"}}, "required": ["activities", "project_id", "project_name", "total_activities", "schedule_mode"], "title": "OutputKeyProjectActivities", "type": "object"}, "OutputProjectSchedule": {"description": "Project schedule with critical path data", "properties": {"tasks": {"items": {"$ref": "#/components/schemas/ScheduleTaskItem"}, "title": "Tasks", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "total_tasks": {"title": "Total Tasks", "type": "integer"}, "critical_path_tasks": {"title": "Critical Path Tasks", "type": "integer"}, "project_duration_days": {"title": "Project Duration Days", "type": "integer"}, "has_schedule_data": {"title": "Has Schedule Data", "type": "boolean"}, "warnings": {"default": [], "items": {"$ref": "#/components/schemas/ScheduleWarning"}, "title": "Warnings", "type": "array"}, "schedule_last_computed": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Schedule Last Computed"}, "schedule_last_modified": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Schedule Last Modified"}}, "required": ["tasks", "project_id", "project_name", "total_tasks", "critical_path_tasks", "project_duration_days", "has_schedule_data"], "title": "OutputProjectSchedule", "type": "object"}, "ScheduleTaskItem": {"description": "Single task in project schedule with critical path data", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}, "early_start": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Early Start"}, "early_finish": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Early Finish"}, "late_start": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Late Start"}, "late_finish": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Late Finish"}, "total_float_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Total Float Days"}, "free_float_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Free Float Days"}, "is_critical": {"title": "Is Critical", "type": "boolean"}, "duration_days": {"title": "Duration Days", "type": "integer"}}, "required": ["id", "name", "hierarchy_id", "is_critical", "duration_days"], "title": "ScheduleTaskItem", "type": "object"}, "ScheduleWarning": {"description": "Single warning from preflight checks", "properties": {"warning_type": {"title": "Warning Type", "type": "string"}, "severity": {"title": "Severity", "type": "string"}, "message": {"title": "Message", "type": "string"}, "affected_count": {"title": "Affected Count", "type": "integer"}, "work_items": {"default": [], "items": {"$ref": "#/components/schemas/WorkItemReference"}, "title": "Work Items", "type": "array"}}, "required": ["warning_type", "severity", "message", "affected_count"], "title": "ScheduleWarning", "type": "object"}, "WorkItemReference": {"description": "Reference to a work item in warnings", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}}, "required": ["id", "name", "hierarchy_id"], "title": "WorkItemReference", "type": "object"}, "GanttTask": {"description": "One work item on a Gantt timeline.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "start": {"title": "Start", "type": "string"}, "end": {"title": "End", "type": "string"}, "progress": {"title": "Progress", "type": "integer"}, "dependencies": {"title": "Dependencies", "type": "string"}, "custom_class": {"title": "Custom Class", "type": "string"}, "bg_color": {"title": "Bg Color", "type": "string"}, "text_color": {"title": "Text Color", "type": "string"}}, "required": ["id", "name", "start", "end", "progress", "dependencies", "custom_class", "bg_color", "text_color"], "title": "GanttTask", "type": "object"}, "OutputProjectGanttData": {"description": "A project's work items as a Gantt timeline.", "properties": {"tasks": {"items": {"$ref": "#/components/schemas/GanttTask"}, "title": "Tasks", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "has_data": {"title": "Has Data", "type": "boolean"}, "warnings": {"default": [], "items": {"$ref": "#/components/schemas/ScheduleWarning"}, "title": "Warnings", "type": "array"}}, "required": ["tasks", "project_id", "project_name", "has_data"], "title": "OutputProjectGanttData", "type": "object"}, "EVMWarning": {"description": "Single warning from EVM preflight checks", "properties": {"warning_type": {"title": "Warning Type", "type": "string"}, "severity": {"title": "Severity", "type": "string"}, "message": {"title": "Message", "type": "string"}, "affected_count": {"title": "Affected Count", "type": "integer"}, "work_items": {"default": [], "items": {"$ref": "#/components/schemas/WorkItemReference"}, "title": "Work Items", "type": "array"}}, "required": ["warning_type", "severity", "message", "affected_count"], "title": "EVMWarning", "type": "object"}, "OutputProjectEVMMetrics": {"description": "Earned Value Management (EVM) metrics for a project", "properties": {"pv": {"title": "Pv", "type": "string"}, "ev": {"title": "Ev", "type": "string"}, "ac": {"title": "Ac", "type": "string"}, "spi": {"title": "Spi", "type": "string"}, "cpi": {"title": "Cpi", "type": "string"}, "cv": {"title": "Cv", "type": "string"}, "sv": {"title": "Sv", "type": "string"}, "bac": {"title": "Bac", "type": "string"}, "eac": {"title": "Eac", "type": "string"}, "etc": {"title": "Etc", "type": "string"}, "vac": {"title": "Vac", "type": "string"}, "eac_method1": {"title": "Eac Method1", "type": "string"}, "etc_method1": {"title": "Etc Method1", "type": "string"}, "vac_method1": {"title": "Vac Method1", "type": "string"}, "eac_method2": {"title": "Eac Method2", "type": "string"}, "etc_method2": {"title": "Etc Method2", "type": "string"}, "vac_method2": {"title": "Vac Method2", "type": "string"}, "eac_method3": {"title": "Eac Method3", "type": "string"}, "etc_method3": {"title": "Etc Method3", "type": "string"}, "vac_method3": {"title": "Vac Method3", "type": "string"}, "eac_method4": {"title": "Eac Method4", "type": "string"}, "etc_method4": {"title": "Etc Method4", "type": "string"}, "vac_method4": {"title": "Vac Method4", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "percent_complete": {"title": "Percent Complete", "type": "string"}, "spi_status": {"title": "Spi Status", "type": "string"}, "cpi_status": {"title": "Cpi Status", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "has_evm_data": {"title": "Has Evm Data", "type": "boolean"}, "warnings": {"default": [], "items": {"$ref": "#/components/schemas/EVMWarning"}, "title": "Warnings", "type": "array"}, "chart_categories": {"default": [], "items": {"type": "string"}, "title": "Chart Categories", "type": "array"}, "chart_series": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Chart Series", "type": "array"}}, "required": ["pv", "ev", "ac", "spi", "cpi", "cv", "sv", "bac", "eac", "etc", "vac", "eac_method1", "etc_method1", "vac_method1", "eac_method2", "etc_method2", "vac_method2", "eac_method3", "etc_method3", "vac_method3", "eac_method4", "etc_method4", "vac_method4", "currency_symbol", "percent_complete", "spi_status", "cpi_status", "project_id", "project_name", "has_evm_data"], "title": "OutputProjectEVMMetrics", "type": "object"}, "OutputProjectWorkItemDetail": {"description": "Detail output for a single project work item", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}, "work_item_type_id": {"title": "Work Item Type Id", "type": "string"}, "work_item_type_name": {"title": "Work Item Type Name", "type": "string"}, "scheduling_behaviour": {"enum": ["summary", "event", "execution"], "title": "Scheduling Behaviour", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "project_settings": {"additionalProperties": true, "default": {}, "title": "Project Settings", "type": "object"}, "parent_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Id"}, "parent_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Name"}, "parent_is_not_root": {"default": false, "title": "Parent Is Not Root", "type": "boolean"}, "owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Id"}, "owner_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Name"}, "owner_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Avatar Url"}, "estimated_work_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "percent_complete": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Percent Complete"}, "planned_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned End"}, "actual_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Actual Start"}, "actual_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Actual End"}, "timeline_source": {"enum": ["manual", "cpm"], "title": "Timeline Source", "type": "string"}, "schedule_not_calculated": {"default": false, "title": "Schedule Not Calculated", "type": "boolean"}, "is_finished": {"title": "Is Finished", "type": "boolean"}, "finished_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Finished At"}, "is_accepted": {"title": "Is Accepted", "type": "boolean"}, "visible_to_customer": {"title": "Visible To Customer", "type": "boolean"}, "is_parent": {"title": "Is Parent", "type": "boolean"}, "can_have_children": {"default": false, "title": "Can Have Children", "type": "boolean"}, "can_have_dependencies": {"title": "Can Have Dependencies", "type": "boolean"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "product_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Name"}, "product_status": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Status"}, "product_status_lifecycle_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Status Lifecycle Type"}, "product_status_options": {"default": [], "items": {"$ref": "#/components/schemas/ProductStatusOption"}, "title": "Product Status Options", "type": "array"}, "can_deliver": {"default": false, "title": "Can Deliver", "type": "boolean"}, "deliver_blocked_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Deliver Blocked Reason"}, "reopen_grace_days": {"default": 0, "title": "Reopen Grace Days", "type": "integer"}}, "required": ["external_id", "name", "hierarchy_id", "work_item_type_id", "work_item_type_name", "scheduling_behaviour", "project_id", "project_name", "timeline_source", "is_finished", "is_accepted", "visible_to_customer", "is_parent", "can_have_dependencies"], "title": "OutputProjectWorkItemDetail", "type": "object"}, "ProductStatusOption": {"description": "A status this product may legally move to next.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "lifecycle_type": {"title": "Lifecycle Type", "type": "string"}}, "required": ["id", "name", "lifecycle_type"], "title": "ProductStatusOption", "type": "object"}, "AddWorkItem": {"properties": {"name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "estimated_work_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "planned_start_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned Start Date"}, "planned_finish_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned Finish Date"}, "estimated_duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Duration Days"}, "constraint_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Constraint Type"}, "constraint_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Constraint Date"}, "owner": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner"}, "visible_to_customer": {"default": false, "title": "Visible To Customer", "type": "boolean"}, "product": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product"}, "project_id": {"title": "Project Id", "type": "string"}, "work_item_type_id": {"title": "Work Item Type Id", "type": "string"}, "parent_work_item_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Work Item Id"}}, "required": ["name", "project_id", "work_item_type_id"], "title": "AddWorkItem", "type": "object"}, "InstantiateWorkItemTemplate": {"description": "Schema for instantiating a work item template into a project.", "properties": {"project_id": {"title": "Project Id", "type": "string"}, "template_id": {"title": "Template Id", "type": "string"}, "parent_work_item_id": {"title": "Parent Work Item Id", "type": "string"}, "default_owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Owner Id"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "milestone_dates": {"anyOf": [{"additionalProperties": {"type": "string"}, "type": "object"}, {"type": "null"}], "title": "Milestone Dates"}, "bypass_wbs_rules": {"default": false, "title": "Bypass Wbs Rules", "type": "boolean"}}, "required": ["project_id", "template_id", "parent_work_item_id"], "title": "InstantiateWorkItemTemplate", "type": "object"}, "EditWorkItem": {"description": "Schema for editing an existing work item", "properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "estimated_work_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "planned_start_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned Start Date"}, "planned_finish_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned Finish Date"}, "estimated_duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Duration Days"}, "constraint_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Constraint Type"}, "constraint_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Constraint Date"}, "owner": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner"}, "visible_to_customer": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Visible To Customer"}, "parent": {"title": "Parent", "type": "string"}, "product": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product"}}, "required": ["name", "parent"], "title": "EditWorkItem", "type": "object"}, "UpdateWorkItemStatus": {"description": "Schema for updating work item status (execution-type work items only).\n\nDynamic behavior based on current state:\n- NOT finished: Send finished_at to mark as complete (auto-sets is_finished=True, percent=100)\n- IS finished: Send is_finished=False to unmark (clears finished_at, resets percent if was 100)\n- Always: Send percent_complete to adjust progress independently", "properties": {"percent_complete": {"anyOf": [{"maximum": 100, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Percent Complete"}, "is_finished": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Finished"}, "finished_at": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Finished At"}}, "title": "UpdateWorkItemStatus", "type": "object"}, "AddWorkItemPredecessor": {"description": "Schema for adding a predecessor dependency to a work item", "properties": {"work_item_id": {"title": "Work Item Id", "type": "string"}, "predecessor_id": {"title": "Predecessor Id", "type": "string"}, "dependency_type": {"title": "Dependency Type", "type": "string"}, "lag_duration": {"default": 0, "title": "Lag Duration", "type": "integer"}}, "required": ["work_item_id", "predecessor_id", "dependency_type"], "title": "AddWorkItemPredecessor", "type": "object"}, "AddWorkItemSuccessor": {"description": "Schema for adding a successor dependency to a work item", "properties": {"work_item_id": {"title": "Work Item Id", "type": "string"}, "successor_id": {"title": "Successor Id", "type": "string"}, "dependency_type": {"title": "Dependency Type", "type": "string"}, "lag_duration": {"default": 0, "title": "Lag Duration", "type": "integer"}}, "required": ["work_item_id", "successor_id", "dependency_type"], "title": "AddWorkItemSuccessor", "type": "object"}, "DependencyItem": {"description": "A single work item dependency", "properties": {"external_id": {"title": "External Id", "type": "string"}, "predecessor_id": {"title": "Predecessor Id", "type": "string"}, "predecessor_name": {"title": "Predecessor Name", "type": "string"}, "predecessor_hierarchy_id": {"title": "Predecessor Hierarchy Id", "type": "string"}, "successor_id": {"title": "Successor Id", "type": "string"}, "successor_name": {"title": "Successor Name", "type": "string"}, "successor_hierarchy_id": {"title": "Successor Hierarchy Id", "type": "string"}, "dependency_type": {"title": "Dependency Type", "type": "string"}, "dependency_type_label": {"title": "Dependency Type Label", "type": "string"}, "lag_duration": {"title": "Lag Duration", "type": "integer"}, "description": {"title": "Description", "type": "string"}}, "required": ["external_id", "predecessor_id", "predecessor_name", "predecessor_hierarchy_id", "successor_id", "successor_name", "successor_hierarchy_id", "dependency_type", "dependency_type_label", "lag_duration", "description"], "title": "DependencyItem", "type": "object"}, "WorkItemDependenciesOutput": {"description": "Output for displaying work item dependencies grouped by predecessors/successors", "properties": {"predecessors": {"items": {"$ref": "#/components/schemas/DependencyItem"}, "title": "Predecessors", "type": "array"}, "successors": {"items": {"$ref": "#/components/schemas/DependencyItem"}, "title": "Successors", "type": "array"}, "dependency_types": {"items": {"maxItems": 2, "minItems": 2, "prefixItems": [{"type": "string"}, {"type": "string"}], "type": "array"}, "title": "Dependency Types", "type": "array"}}, "required": ["predecessors", "successors", "dependency_types"], "title": "WorkItemDependenciesOutput", "type": "object"}, "AddWorkItemCost": {"properties": {"work_item": {"title": "Work Item", "type": "string"}, "cost_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cost Type"}, "resource_cost": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Cost"}, "resource_booking": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Booking"}, "expected_amount": {"title": "Expected Amount", "type": "string"}, "expected_date": {"title": "Expected Date", "type": "string"}, "uom": {"title": "Uom", "type": "string"}, "units": {"anyOf": [{"type": "integer"}, {"type": "null"}], "default": 1, "title": "Units"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["work_item", "expected_amount", "expected_date", "uom"], "title": "AddWorkItemCost", "type": "object"}, "AddWorkItemExpense": {"properties": {"work_item": {"title": "Work Item", "type": "string"}, "cost_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cost Type"}, "resource_cost": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Cost"}, "resource_booking": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Booking"}, "actual_amount": {"title": "Actual Amount", "type": "string"}, "actual_date": {"title": "Actual Date", "type": "string"}, "uom": {"title": "Uom", "type": "string"}, "units": {"anyOf": [{"type": "integer"}, {"type": "null"}], "default": 1, "title": "Units"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["work_item", "actual_amount", "actual_date", "uom"], "title": "AddWorkItemExpense", "type": "object"}, "AddWorkLog": {"properties": {"work_item": {"title": "Work Item", "type": "string"}, "project": {"title": "Project", "type": "string"}, "booking": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking"}, "member": {"title": "Member", "type": "string"}, "duration": {"description": "How long the work took: 2, 1h30m, 45m or 3:45. A bare number is hours.", "title": "Duration", "type": "string"}, "date": {"title": "Date", "type": "string"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["work_item", "project", "member", "duration", "date"], "title": "AddWorkLog", "type": "object"}, "EditWorkLog": {"properties": {"booking": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking"}, "duration": {"description": "How long the work took: 2, 1h30m, 45m or 3:45. A bare number is hours.", "title": "Duration", "type": "string"}, "date": {"title": "Date", "type": "string"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["duration", "date"], "title": "EditWorkLog", "type": "object"}, "AddWorkResourceUsage": {"properties": {"work_item": {"title": "Work Item", "type": "string"}, "project": {"title": "Project", "type": "string"}, "booking": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking"}, "resource": {"title": "Resource", "type": "string"}, "member": {"title": "Member", "type": "string"}, "usage": {"title": "Usage", "type": "integer"}, "date": {"title": "Date", "type": "string"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["work_item", "project", "resource", "member", "usage", "date"], "title": "AddWorkResourceUsage", "type": "object"}, "EditWorkResourceUsage": {"properties": {"booking": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking"}, "member": {"title": "Member", "type": "string"}, "usage": {"title": "Usage", "type": "integer"}, "date": {"title": "Date", "type": "string"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["member", "usage", "date"], "title": "EditWorkResourceUsage", "type": "object"}, "EditWorkItemCost": {"properties": {"cost_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cost Type"}, "resource_cost": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Cost"}, "resource_booking": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Booking"}, "expected_amount": {"title": "Expected Amount", "type": "string"}, "expected_date": {"title": "Expected Date", "type": "string"}, "uom": {"title": "Uom", "type": "string"}, "units": {"anyOf": [{"type": "integer"}, {"type": "null"}], "default": 1, "title": "Units"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["expected_amount", "expected_date", "uom"], "title": "EditWorkItemCost", "type": "object"}, "EditWorkItemExpense": {"properties": {"cost_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cost Type"}, "resource_cost": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Cost"}, "resource_booking": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Booking"}, "actual_amount": {"title": "Actual Amount", "type": "string"}, "actual_date": {"title": "Actual Date", "type": "string"}, "uom": {"title": "Uom", "type": "string"}, "units": {"anyOf": [{"type": "integer"}, {"type": "null"}], "default": 1, "title": "Units"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["actual_amount", "actual_date", "uom"], "title": "EditWorkItemExpense", "type": "object"}, "CostItem": {"properties": {"external_id": {"title": "External Id", "type": "string"}, "cost_type_name": {"title": "Cost Type Name", "type": "string"}, "cost_type_id": {"title": "Cost Type Id", "type": "string"}, "expected_amount": {"title": "Expected Amount", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "expected_date": {"format": "date", "title": "Expected Date", "type": "string"}, "units": {"title": "Units", "type": "integer"}, "uom": {"title": "Uom", "type": "string"}, "note": {"title": "Note", "type": "string"}, "resource_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Name"}, "resource_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Id"}, "booking_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking Name"}, "booking_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking Id"}, "member_full_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Full Name"}, "member_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Id"}, "work_item_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Name"}, "work_item_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Id"}}, "required": ["external_id", "cost_type_name", "cost_type_id", "expected_amount", "currency_symbol", "expected_date", "units", "uom", "note"], "title": "CostItem", "type": "object"}, "WorkItemCostsOutput": {"properties": {"costs": {"items": {"$ref": "#/components/schemas/CostItem"}, "title": "Costs", "type": "array"}, "total_expected": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Total Expected"}, "total_by_currency": {"additionalProperties": {"type": "string"}, "default": {}, "title": "Total By Currency", "type": "object"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "total_in_workspace_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Total In Workspace Currency"}, "workspace_currency": {"default": "", "title": "Workspace Currency", "type": "string"}, "project_currency": {"default": "", "title": "Project Currency", "type": "string"}, "cost_count": {"title": "Cost Count", "type": "integer"}, "work_item_id": {"title": "Work Item Id", "type": "string"}, "work_item_name": {"title": "Work Item Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_currency_symbol": {"title": "Project Currency Symbol", "type": "string"}}, "required": ["costs", "cost_count", "work_item_id", "work_item_name", "project_id", "project_currency_symbol"], "title": "WorkItemCostsOutput", "type": "object"}, "ExpenseItem": {"properties": {"external_id": {"title": "External Id", "type": "string"}, "cost_type_name": {"title": "Cost Type Name", "type": "string"}, "cost_type_id": {"title": "Cost Type Id", "type": "string"}, "actual_amount": {"title": "Actual Amount", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "actual_date": {"format": "date", "title": "Actual Date", "type": "string"}, "units": {"title": "Units", "type": "integer"}, "uom": {"title": "Uom", "type": "string"}, "note": {"title": "Note", "type": "string"}, "resource_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Name"}, "resource_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Id"}, "booking_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking Name"}, "booking_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking Id"}, "member_full_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Full Name"}, "member_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Id"}, "work_item_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Name"}, "work_item_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Id"}}, "required": ["external_id", "cost_type_name", "cost_type_id", "actual_amount", "currency_symbol", "actual_date", "units", "uom", "note"], "title": "ExpenseItem", "type": "object"}, "WorkItemExpensesOutput": {"properties": {"expenses": {"items": {"$ref": "#/components/schemas/ExpenseItem"}, "title": "Expenses", "type": "array"}, "total_actual": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Total Actual"}, "total_by_currency": {"additionalProperties": {"type": "string"}, "default": {}, "title": "Total By Currency", "type": "object"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "total_in_workspace_currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Total In Workspace Currency"}, "workspace_currency": {"default": "", "title": "Workspace Currency", "type": "string"}, "project_currency": {"default": "", "title": "Project Currency", "type": "string"}, "expense_count": {"title": "Expense Count", "type": "integer"}, "work_item_id": {"title": "Work Item Id", "type": "string"}, "work_item_name": {"title": "Work Item Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_currency_symbol": {"title": "Project Currency Symbol", "type": "string"}}, "required": ["expenses", "expense_count", "work_item_id", "work_item_name", "project_id", "project_currency_symbol"], "title": "WorkItemExpensesOutput", "type": "object"}, "WorkItemWorkLogsOutput": {"properties": {"work_logs": {"items": {"$ref": "#/components/schemas/WorkLogItem"}, "title": "Work Logs", "type": "array"}, "total_minutes": {"title": "Total Minutes", "type": "integer"}, "log_count": {"title": "Log Count", "type": "integer"}, "work_item_id": {"title": "Work Item Id", "type": "string"}, "work_item_name": {"title": "Work Item Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}}, "required": ["work_logs", "total_minutes", "log_count", "work_item_id", "work_item_name", "project_id"], "title": "WorkItemWorkLogsOutput", "type": "object"}, "WorkLogItem": {"properties": {"external_id": {"title": "External Id", "type": "string"}, "booking_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking Name"}, "booking_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Booking Id"}, "member_full_name": {"title": "Member Full Name", "type": "string"}, "member_id": {"title": "Member Id", "type": "string"}, "minutes": {"title": "Minutes", "type": "integer"}, "date": {"format": "date", "title": "Date", "type": "string"}, "note": {"title": "Note", "type": "string"}, "is_deletable": {"title": "Is Deletable", "type": "boolean"}, "is_editable": {"title": "Is Editable", "type": "boolean"}}, "required": ["external_id", "member_full_name", "member_id", "minutes", "date", "note", "is_deletable", "is_editable"], "title": "WorkLogItem", "type": "object"}, "ResourceUsageItem": {"properties": {"external_id": {"title": "External Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "resource_id": {"title": "Resource Id", "type": "string"}, "booking_name": {"title": "Booking Name", "type": "string"}, "booking_id": {"title": "Booking Id", "type": "string"}, "member_full_name": {"title": "Member Full Name", "type": "string"}, "member_id": {"title": "Member Id", "type": "string"}, "usage": {"title": "Usage", "type": "integer"}, "date": {"format": "date", "title": "Date", "type": "string"}, "note": {"title": "Note", "type": "string"}}, "required": ["external_id", "resource_name", "resource_id", "booking_name", "booking_id", "member_full_name", "member_id", "usage", "date", "note"], "title": "ResourceUsageItem", "type": "object"}, "WorkItemResourceUsageOutput": {"properties": {"resource_usage": {"items": {"$ref": "#/components/schemas/ResourceUsageItem"}, "title": "Resource Usage", "type": "array"}, "total_usage": {"title": "Total Usage", "type": "integer"}, "usage_count": {"title": "Usage Count", "type": "integer"}, "work_item_id": {"title": "Work Item Id", "type": "string"}, "work_item_name": {"title": "Work Item Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}}, "required": ["resource_usage", "total_usage", "usage_count", "work_item_id", "work_item_name", "project_id"], "title": "WorkItemResourceUsageOutput", "type": "object"}, "ProjectTeamMember": {"description": "Team member booked for a project", "properties": {"id": {"title": "Id", "type": "string"}, "member_name": {"title": "Member Name", "type": "string"}, "member_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Avatar Url"}, "member_email": {"title": "Member Email", "type": "string"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "End Date"}, "hours_per_day": {"title": "Hours Per Day", "type": "integer"}, "name": {"title": "Name", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_upcoming": {"default": false, "title": "Is Upcoming", "type": "boolean"}}, "required": ["id", "member_name", "member_email", "start_date", "hours_per_day", "name", "is_active"], "title": "ProjectTeamMember", "type": "object"}, "ProjectTeamMembers": {"description": "List of team members for a project", "properties": {"team_members": {"items": {"$ref": "#/components/schemas/ProjectTeamMember"}, "title": "Team Members", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}}, "required": ["team_members", "project_id", "project_name"], "title": "ProjectTeamMembers", "type": "object"}, "TeamMemberWorkItem": {"description": "Individual work item owned by a team member", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}, "item_type_name": {"title": "Item Type Name", "type": "string"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}, "estimated_work_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "total_logged_minutes": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Total Logged Minutes"}, "effort_state": {"default": "none", "title": "Effort State", "type": "string"}, "is_finished": {"title": "Is Finished", "type": "boolean"}, "is_accepted": {"title": "Is Accepted", "type": "boolean"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}}, "required": ["external_id", "name", "hierarchy_id", "item_type_name", "scheduling_behaviour", "is_finished", "is_accepted", "project_id", "project_name"], "title": "TeamMemberWorkItem", "type": "object"}, "TeamMemberWorkItems": {"description": "List of work items owned by a team member in a project", "properties": {"team_member_id": {"title": "Team Member Id", "type": "string"}, "team_member_name": {"title": "Team Member Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "work_items": {"items": {"$ref": "#/components/schemas/TeamMemberWorkItem"}, "title": "Work Items", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["team_member_id", "team_member_name", "project_id", "project_name", "work_items", "total"], "title": "TeamMemberWorkItems", "type": "object"}, "OutputTeamMemberBookingHeatmap": {"description": "Heatmap data for team member bookings in a project\n\nShows three metrics per cell:\n- activity: Actual logged work minutes from WorkLog records\n- booking: Allocated hours from TeamBooking (cumulative if overlapping)\n- availability: Weekly availability hours from Availability records (+1 bonus if > 0)", "properties": {"team_member_id": {"title": "Team Member Id", "type": "string"}, "team_member_name": {"title": "Team Member Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "earliest_booking_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Earliest Booking Date"}, "latest_booking_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Latest Booking Date"}, "total_weeks": {"title": "Total Weeks", "type": "integer"}, "weeks": {"items": {"type": "string"}, "title": "Weeks", "type": "array"}, "week_labels": {"additionalProperties": {"type": "string"}, "title": "Week Labels", "type": "object"}, "weekdays": {"default": [0, 1, 2, 3, 4, 5, 6], "items": {"type": "integer"}, "title": "Weekdays", "type": "array"}, "data": {"additionalProperties": {"additionalProperties": {"additionalProperties": true, "type": "object"}, "type": "object"}, "title": "Data", "type": "object"}, "total_bookings": {"title": "Total Bookings", "type": "integer"}, "avg_activity": {"title": "Avg Activity", "type": "number"}, "avg_booking": {"title": "Avg Booking", "type": "number"}, "avg_availability": {"title": "Avg Availability", "type": "number"}, "has_booking_data": {"title": "Has Booking Data", "type": "boolean"}, "has_effort_data": {"title": "Has Effort Data", "type": "boolean"}}, "required": ["team_member_id", "team_member_name", "project_id", "project_name", "total_weeks", "weeks", "week_labels", "data", "total_bookings", "avg_activity", "avg_booking", "avg_availability", "has_booking_data", "has_effort_data"], "title": "OutputTeamMemberBookingHeatmap", "type": "object"}, "ProjectTeamPeople": {"description": "List of unique people working on a project\n\nEach person object always contains ALL possible fields:\n- member_id, member_name (always present)\n- Booking fields: total_days, booking_count, earliest_start, latest_end, has_bookings\n- Effort fields: logged_minutes, log_count, has_work_logs\n- Ownership fields: owned_items, completed_items, has_owned_items\n\nThe has_* flags indicate which data is actually present for each member.\nUse these flags in templates to conditionally display relevant data.\n\nMode flags (booking_mode, effort_mode, ownership_mode) indicate which\nproject features are enabled and which data sources were queried.", "properties": {"people": {"items": {"additionalProperties": true, "type": "object"}, "title": "People", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "total_people": {"title": "Total People", "type": "integer"}, "booking_mode": {"title": "Booking Mode", "type": "boolean"}, "effort_mode": {"title": "Effort Mode", "type": "boolean"}, "ownership_mode": {"title": "Ownership Mode", "type": "boolean"}}, "required": ["people", "project_id", "project_name", "total_people", "booking_mode", "effort_mode", "ownership_mode"], "title": "ProjectTeamPeople", "type": "object"}, "ProjectResource": {"description": "Resource booked for a project", "properties": {"id": {"title": "Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "resource_hierarchy_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Hierarchy Id"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "End Date"}, "hours_per_day": {"title": "Hours Per Day", "type": "integer"}, "name": {"title": "Name", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_upcoming": {"default": false, "title": "Is Upcoming", "type": "boolean"}}, "required": ["id", "resource_name", "start_date", "hours_per_day", "name", "is_active"], "title": "ProjectResource", "type": "object"}, "ProjectResources": {"description": "List of resources for a project", "properties": {"resources": {"items": {"$ref": "#/components/schemas/ProjectResource"}, "title": "Resources", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}}, "required": ["resources", "project_id", "project_name"], "title": "ProjectResources", "type": "object"}, "ProjectResourceItems": {"description": "List of unique resources working on a project\n\nThe item structure depends on the mode:\n- booking_mode=True: items contain ProjectResourceItemBooking fields\n- usage_mode=True: items contain ProjectResourceItemUsage fields", "properties": {"items": {"items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "total_resources": {"title": "Total Resources", "type": "integer"}, "booking_mode": {"title": "Booking Mode", "type": "boolean"}, "usage_mode": {"title": "Usage Mode", "type": "boolean"}}, "required": ["items", "project_id", "project_name", "total_resources", "booking_mode", "usage_mode"], "title": "ProjectResourceItems", "type": "object"}, "ProjectResourceBooking": {"description": "Individual resource booking for a project", "properties": {"id": {"title": "Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "resource_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Type"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "End Date"}, "hours_per_day": {"title": "Hours Per Day", "type": "number"}, "name": {"title": "Name", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_upcoming": {"default": false, "title": "Is Upcoming", "type": "boolean"}}, "required": ["id", "resource_name", "start_date", "hours_per_day", "name", "is_active"], "title": "ProjectResourceBooking", "type": "object"}, "ProjectResourceBookings": {"description": "List of resource bookings for a project", "properties": {"resource_bookings": {"items": {"$ref": "#/components/schemas/ProjectResourceBooking"}, "title": "Resource Bookings", "type": "array"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}}, "required": ["resource_bookings", "project_id", "project_name"], "title": "ProjectResourceBookings", "type": "object"}, "ResourceWorkItem": {"description": "Individual work item where a resource was used", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}, "item_type_name": {"title": "Item Type Name", "type": "string"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}, "estimated_work_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "total_usage": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Total Usage"}, "is_finished": {"title": "Is Finished", "type": "boolean"}, "is_accepted": {"title": "Is Accepted", "type": "boolean"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}}, "required": ["external_id", "name", "hierarchy_id", "item_type_name", "scheduling_behaviour", "is_finished", "is_accepted", "project_id", "project_name"], "title": "ResourceWorkItem", "type": "object"}, "ResourceWorkItems": {"description": "List of work items where a resource was used in a project", "properties": {"resource_id": {"title": "Resource Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "work_items": {"items": {"$ref": "#/components/schemas/ResourceWorkItem"}, "title": "Work Items", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["resource_id", "resource_name", "project_id", "project_name", "work_items", "total"], "title": "ResourceWorkItems", "type": "object"}, "ProjectResourceActivityOutput": {"properties": {"usage_items": {"items": {"$ref": "#/components/schemas/ResourceActivityItem"}, "title": "Usage Items", "type": "array"}, "total_usage": {"title": "Total Usage", "type": "integer"}, "usage_count": {"title": "Usage Count", "type": "integer"}, "resource_id": {"title": "Resource Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}}, "required": ["usage_items", "total_usage", "usage_count", "resource_id", "resource_name", "project_id"], "title": "ProjectResourceActivityOutput", "type": "object"}, "ResourceActivityItem": {"properties": {"external_id": {"title": "External Id", "type": "string"}, "booking_name": {"title": "Booking Name", "type": "string"}, "booking_id": {"title": "Booking Id", "type": "string"}, "work_item_name": {"title": "Work Item Name", "type": "string"}, "work_item_id": {"title": "Work Item Id", "type": "string"}, "member_full_name": {"title": "Member Full Name", "type": "string"}, "member_id": {"title": "Member Id", "type": "string"}, "usage": {"title": "Usage", "type": "integer"}, "date": {"format": "date", "title": "Date", "type": "string"}, "note": {"title": "Note", "type": "string"}}, "required": ["external_id", "booking_name", "booking_id", "work_item_name", "work_item_id", "member_full_name", "member_id", "usage", "date", "note"], "title": "ResourceActivityItem", "type": "object"}, "ProjectResourceActivityHistogramSchema": {"description": "Project resource activity histogram data for visualization", "properties": {"resource_id": {"title": "Resource Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "weeks": {"items": {"$ref": "#/components/schemas/ProjectResourceActivityWeeklySchema"}, "title": "Weeks", "type": "array"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "max_usage": {"title": "Max Usage", "type": "integer"}, "total_usage": {"title": "Total Usage", "type": "integer"}}, "required": ["resource_id", "resource_name", "project_id", "project_name", "weeks", "start_date", "end_date", "max_usage", "total_usage"], "title": "ProjectResourceActivityHistogramSchema", "type": "object"}, "ProjectResourceActivityWeeklySchema": {"description": "Weekly aggregated resource usage data for project resource activity histogram", "properties": {"week_start": {"format": "date", "title": "Week Start", "type": "string"}, "week_end": {"format": "date", "title": "Week End", "type": "string"}, "year_week": {"title": "Year Week", "type": "string"}, "week_label": {"title": "Week Label", "type": "string"}, "week_start_formatted": {"title": "Week Start Formatted", "type": "string"}, "week_end_formatted": {"title": "Week End Formatted", "type": "string"}, "usage_count": {"title": "Usage Count", "type": "integer"}}, "required": ["week_start", "week_end", "year_week", "week_label", "week_start_formatted", "week_end_formatted", "usage_count"], "title": "ProjectResourceActivityWeeklySchema", "type": "object"}, "ProjectProductCostComparisonProductSchema": {"description": "Individual product cost comparison data for grouped bar chart", "properties": {"product_id": {"title": "Product Id", "type": "string"}, "product_name": {"title": "Product Name", "type": "string"}, "product_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Code"}, "proposal_cost": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Proposal Cost", "type": "string"}, "project_cost": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Project Cost", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "has_work_items": {"title": "Has Work Items", "type": "boolean"}}, "required": ["product_id", "product_name", "proposal_cost", "project_cost", "currency_symbol", "has_work_items"], "title": "ProjectProductCostComparisonProductSchema", "type": "object"}, "ProjectProductCostComparisonSchema": {"description": "Project product cost comparison data for grouped bar chart visualization\n\nThe chart mode depends on financial management setting:\n- financial_mode=True: Shows grouped bars (proposal vs project cost)\n- simplified_mode=True: Shows single bars (proposal cost only)", "properties": {"project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "products": {"items": {"$ref": "#/components/schemas/ProjectProductCostComparisonProductSchema"}, "title": "Products", "type": "array"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "max_cost": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Max Cost", "type": "string"}, "total_proposal_cost": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Proposal Cost", "type": "string"}, "total_project_cost": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Project Cost", "type": "string"}, "financial_mode": {"title": "Financial Mode", "type": "boolean"}, "simplified_mode": {"title": "Simplified Mode", "type": "boolean"}}, "required": ["project_id", "project_name", "products", "currency_symbol", "max_cost", "total_proposal_cost", "total_project_cost", "financial_mode", "simplified_mode"], "title": "ProjectProductCostComparisonSchema", "type": "object"}, "ProductBudgetBreakdownItem": {"description": "Product budget breakdown by cost type", "properties": {"product_id": {"title": "Product Id", "type": "string"}, "product_name": {"title": "Product Name", "type": "string"}, "product_url": {"title": "Product Url", "type": "string"}, "current_status": {"$ref": "#/components/schemas/ProductStatusDetail"}, "is_active": {"title": "Is Active", "type": "boolean"}, "cost_types": {"items": {"$ref": "#/components/schemas/ProductCostTypeBreakdown"}, "title": "Cost Types", "type": "array"}, "total_cost": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Cost", "type": "string"}}, "required": ["product_id", "product_name", "product_url", "current_status", "is_active", "cost_types", "total_cost"], "title": "ProductBudgetBreakdownItem", "type": "object"}, "ProductCostTypeBreakdown": {"description": "Cost type breakdown for a single cost type in a product", "properties": {"name": {"title": "Name", "type": "string"}, "amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Amount", "type": "string"}, "percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percentage", "type": "string"}}, "required": ["name", "amount", "percentage"], "title": "ProductCostTypeBreakdown", "type": "object"}, "ProjectProductBudgetBreakdownSchema": {"description": "Project product budget breakdown showing cost type composition\n\nOnly returns detailed breakdown if financial management is enabled:\n- financial_mode=True: Shows cost breakdowns with pie charts\n- simplified_mode=True: Returns empty list (no breakdown displayed)", "properties": {"products": {"items": {"$ref": "#/components/schemas/ProductBudgetBreakdownItem"}, "title": "Products", "type": "array"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "financial_mode": {"title": "Financial Mode", "type": "boolean"}, "simplified_mode": {"title": "Simplified Mode", "type": "boolean"}}, "required": ["products", "currency_symbol", "currency", "financial_mode", "simplified_mode"], "title": "ProjectProductBudgetBreakdownSchema", "type": "object"}, "ProductResourceUsageItem": {"description": "A single resource usage linked to a product", "properties": {"external_id": {"title": "External Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "resource_id": {"title": "Resource Id", "type": "string"}, "work_item_name": {"title": "Work Item Name", "type": "string"}, "work_item_id": {"title": "Work Item Id", "type": "string"}, "booking_name": {"title": "Booking Name", "type": "string"}, "booking_id": {"title": "Booking Id", "type": "string"}, "member_full_name": {"title": "Member Full Name", "type": "string"}, "member_id": {"title": "Member Id", "type": "string"}, "usage": {"title": "Usage", "type": "integer"}, "date": {"format": "date", "title": "Date", "type": "string"}, "note": {"title": "Note", "type": "string"}}, "required": ["external_id", "resource_name", "resource_id", "work_item_name", "work_item_id", "booking_name", "booking_id", "member_full_name", "member_id", "usage", "date", "note"], "title": "ProductResourceUsageItem", "type": "object"}, "ProductResourceUsagesOutput": {"description": "Resource usages for work items linked to a product", "properties": {"resource_usage": {"items": {"$ref": "#/components/schemas/ProductResourceUsageItem"}, "title": "Resource Usage", "type": "array"}, "total_usage": {"title": "Total Usage", "type": "integer"}, "usage_count": {"title": "Usage Count", "type": "integer"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "product_id": {"title": "Product Id", "type": "string"}, "product_name": {"title": "Product Name", "type": "string"}}, "required": ["resource_usage", "total_usage", "usage_count", "project_id", "project_name", "product_id", "product_name"], "title": "ProductResourceUsagesOutput", "type": "object"}, "ProductWorkItem": {"description": "Individual work item linked to a product", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "hierarchy_id": {"title": "Hierarchy Id", "type": "string"}, "item_type_name": {"title": "Item Type Name", "type": "string"}, "scheduling_behaviour": {"title": "Scheduling Behaviour", "type": "string"}, "estimated_work_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "is_finished": {"title": "Is Finished", "type": "boolean"}, "is_accepted": {"title": "Is Accepted", "type": "boolean"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}}, "required": ["external_id", "name", "hierarchy_id", "item_type_name", "scheduling_behaviour", "is_finished", "is_accepted", "project_id", "project_name"], "title": "ProductWorkItem", "type": "object"}, "ProductWorkItems": {"description": "List of work items linked to a product in a project", "properties": {"product_id": {"title": "Product Id", "type": "string"}, "product_name": {"title": "Product Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "work_items": {"items": {"$ref": "#/components/schemas/ProductWorkItem"}, "title": "Work Items", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["product_id", "product_name", "project_id", "project_name", "work_items", "total"], "title": "ProductWorkItems", "type": "object"}, "OutputProductWorkTemplate": {"description": "Individual template data for product templates tab", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "work_item_type_name": {"title": "Work Item Type Name", "type": "string"}, "work_item_type_scheduling_behaviour": {"title": "Work Item Type Scheduling Behaviour", "type": "string"}, "wbsconfiguration_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wbsconfiguration Name"}, "wbsconfiguration_matches_project": {"default": false, "title": "Wbsconfiguration Matches Project", "type": "boolean"}, "estimated_work_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Work Hours"}, "estimated_duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Estimated Duration Days"}, "is_active": {"title": "Is Active", "type": "boolean"}, "total_hours": {"default": 0, "title": "Total Hours", "type": "integer"}, "total_days": {"default": 0, "title": "Total Days", "type": "integer"}}, "required": ["id", "name", "work_item_type_name", "work_item_type_scheduling_behaviour", "is_active"], "title": "OutputProductWorkTemplate", "type": "object"}, "OutputProductWorkTemplates": {"description": "Templates linked to product via catalog", "properties": {"project_id": {"title": "Project Id", "type": "string"}, "product_id": {"title": "Product Id", "type": "string"}, "catalog_id": {"title": "Catalog Id", "type": "string"}, "catalog_name": {"title": "Catalog Name", "type": "string"}, "templates": {"items": {"$ref": "#/components/schemas/OutputProductWorkTemplate"}, "title": "Templates", "type": "array"}}, "required": ["project_id", "product_id", "catalog_id", "catalog_name", "templates"], "title": "OutputProductWorkTemplates", "type": "object"}, "MonthlyProjection": {"description": "Monthly cash flow projection data", "properties": {"month_name": {"title": "Month Name", "type": "string"}, "inflow": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Inflow", "type": "string"}, "outflow": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Outflow", "type": "string"}, "net": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Net", "type": "string"}, "cumulative": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Cumulative", "type": "string"}}, "required": ["month_name", "inflow", "outflow", "net", "cumulative"], "title": "MonthlyProjection", "type": "object"}, "ProjectCashFlowMetrics": {"description": "Cash flow metrics for a project.\nExtensible schema for future additions like margin, ROI, etc.", "properties": {"project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "total_inflow": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Inflow", "type": "string"}, "total_outflow": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Outflow", "type": "string"}, "net_cash_flow": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Net Cash Flow", "type": "string"}, "monthly_projections": {"default": [], "items": {"$ref": "#/components/schemas/MonthlyProjection"}, "title": "Monthly Projections", "type": "array"}}, "required": ["project_id", "project_name", "currency_symbol", "total_inflow", "total_outflow", "net_cash_flow"], "title": "ProjectCashFlowMetrics", "type": "object"}, "ProjectCashBalanceChartData": {"description": "Cash balance chart data for S-curve visualization.\nShows cumulative cash balance over project duration by week.", "properties": {"cash_balance_data": {"items": {"additionalProperties": true, "type": "object"}, "title": "Cash Balance Data", "type": "array"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "currency_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency Code"}, "project_start": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Start"}, "project_end": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project End"}}, "required": ["cash_balance_data", "currency_symbol"], "title": "ProjectCashBalanceChartData", "type": "object"}, "ActiveProposalItem": {"description": "Proposal item for projects view (active proposals list)", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "stage_name": {"title": "Stage Name", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "product_count": {"title": "Product Count", "type": "integer"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}}, "required": ["id", "name", "stage_name", "stage_type", "product_count"], "title": "ActiveProposalItem", "type": "object"}, "ActiveProposalsList": {"description": "List of active proposals for projects view", "properties": {"proposals": {"items": {"$ref": "#/components/schemas/ActiveProposalItem"}, "title": "Proposals", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}}, "required": ["proposals", "total_count"], "title": "ActiveProposalsList", "type": "object"}, "UploadUrlGCS": {"properties": {"signedUrl": {"title": "Signedurl", "type": "string"}, "gcsObjectName": {"title": "Gcsobjectname", "type": "string"}, "bucket": {"title": "Bucket", "type": "string"}}, "required": ["signedUrl", "gcsObjectName", "bucket"], "title": "UploadUrlGCS", "type": "object"}, "RequestUploadUrlGCS": {"properties": {"fileName": {"maxLength": 100, "minLength": 4, "pattern": "^[\\w.\\- ()]+\\.[a-zA-Z0-9]{1,10}$", "title": "Filename", "type": "string"}, "fileSize": {"exclusiveMinimum": 0, "title": "Filesize", "type": "integer"}, "contentType": {"title": "Contenttype", "type": "string"}}, "required": ["fileName", "fileSize", "contentType"], "title": "RequestUploadUrlGCS", "type": "object"}, "APIError": {"properties": {"message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Message"}}, "title": "APIError", "type": "object"}, "DownloadUrlGCS": {"properties": {"signedUrl": {"title": "Signedurl", "type": "string"}, "gcsObjectName": {"title": "Gcsobjectname", "type": "string"}, "bucket": {"title": "Bucket", "type": "string"}}, "required": ["signedUrl", "gcsObjectName", "bucket"], "title": "DownloadUrlGCS", "type": "object"}, "RequestDownloadUrlGCS": {"properties": {"filePath": {"title": "Filepath", "type": "string"}, "isTrash": {"title": "Istrash", "type": "boolean"}}, "required": ["filePath", "isTrash"], "title": "RequestDownloadUrlGCS", "type": "object"}, "RequestDeleteFileGCS": {"properties": {"filePath": {"title": "Filepath", "type": "string"}}, "required": ["filePath"], "title": "RequestDeleteFileGCS", "type": "object"}, "OutputFileName": {"properties": {"file_name": {"title": "File Name", "type": "string"}, "file_path": {"title": "File Path", "type": "string"}, "file_size": {"title": "File Size", "type": "integer"}}, "required": ["file_name", "file_path", "file_size"], "title": "OutputFileName", "type": "object"}, "OutputFileNameTrash": {"properties": {"file_name": {"title": "File Name", "type": "string"}, "file_path": {"title": "File Path", "type": "string"}, "file_size": {"title": "File Size", "type": "integer"}, "file_countdown": {"title": "File Countdown", "type": "string"}}, "required": ["file_name", "file_path", "file_size", "file_countdown"], "title": "OutputFileNameTrash", "type": "object"}, "OutputFileNames": {"properties": {"node_type": {"enum": ["org", "proposal", "resource", "internal_support_request", "external_support_request", "project_work_item", "operational_work_item", "rfp"], "title": "Node Type", "type": "string"}, "node_id": {"title": "Node Id", "type": "string"}, "successfully_retrieved_files": {"title": "Successfully Retrieved Files", "type": "boolean"}, "successfully_retrieved_trash": {"title": "Successfully Retrieved Trash", "type": "boolean"}, "files": {"items": {"$ref": "#/components/schemas/OutputFileName"}, "title": "Files", "type": "array"}, "trash_can": {"items": {"$ref": "#/components/schemas/OutputFileNameTrash"}, "title": "Trash Can", "type": "array"}}, "required": ["node_type", "node_id", "successfully_retrieved_files", "successfully_retrieved_trash", "files", "trash_can"], "title": "OutputFileNames", "type": "object"}, "FilesStorageMetrics": {"description": "Files storage metrics for dashboard", "properties": {"total_size": {"title": "Total Size", "type": "string"}, "total_files": {"title": "Total Files", "type": "integer"}, "uploads_today": {"title": "Uploads Today", "type": "integer"}, "active_users": {"title": "Active Users", "type": "integer"}}, "required": ["total_size", "total_files", "uploads_today", "active_users"], "title": "FilesStorageMetrics", "type": "object"}, "FilesEntityStorage": {"description": "Storage breakdown by entity type", "properties": {"total_size": {"title": "Total Size", "type": "string"}, "entity_breakdown": {"additionalProperties": {"type": "string"}, "title": "Entity Breakdown", "type": "object"}, "total_files": {"title": "Total Files", "type": "integer"}, "entity_file_counts": {"additionalProperties": {"type": "integer"}, "title": "Entity File Counts", "type": "object"}}, "required": ["total_size", "entity_breakdown", "total_files", "entity_file_counts"], "title": "FilesEntityStorage", "type": "object"}, "OutputTopEntitiesByStorage": {"description": "Top entities by storage usage", "properties": {"entities": {"items": {"$ref": "#/components/schemas/TopEntityByStorage"}, "title": "Entities", "type": "array"}, "entity_type": {"title": "Entity Type", "type": "string"}}, "required": ["entities", "entity_type"], "title": "OutputTopEntitiesByStorage", "type": "object"}, "TopEntityByStorage": {"description": "Individual entity in top storage list", "properties": {"rank": {"title": "Rank", "type": "integer"}, "entity_id": {"title": "Entity Id", "type": "string"}, "entity_name": {"title": "Entity Name", "type": "string"}, "entity_type": {"title": "Entity Type", "type": "string"}, "storage_size": {"title": "Storage Size", "type": "string"}, "file_count": {"title": "File Count", "type": "integer"}}, "required": ["rank", "entity_id", "entity_name", "entity_type", "storage_size", "file_count"], "title": "TopEntityByStorage", "type": "object"}, "OutputTenantTrashFiles": {"description": "List of all files in trash for a tenant", "properties": {"trash_files": {"items": {"$ref": "#/components/schemas/TrashFileInfo"}, "title": "Trash Files", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}, "total_size": {"title": "Total Size", "type": "string"}}, "required": ["trash_files", "total_count", "total_size"], "title": "OutputTenantTrashFiles", "type": "object"}, "TrashFileInfo": {"description": "Information about a file in trash", "properties": {"file_name": {"title": "File Name", "type": "string"}, "file_path": {"title": "File Path", "type": "string"}, "file_size": {"title": "File Size", "type": "integer"}, "file_size_formatted": {"title": "File Size Formatted", "type": "string"}, "entity_type": {"title": "Entity Type", "type": "string"}, "entity_type_display": {"title": "Entity Type Display", "type": "string"}, "entity_id": {"title": "Entity Id", "type": "string"}, "entity_name": {"title": "Entity Name", "type": "string"}, "entity_exists": {"title": "Entity Exists", "type": "boolean"}, "moved_to_trash": {"format": "date-time", "title": "Moved To Trash", "type": "string"}, "time_until_deletion": {"title": "Time Until Deletion", "type": "string"}, "deletion_timestamp": {"format": "date-time", "title": "Deletion Timestamp", "type": "string"}}, "required": ["file_name", "file_path", "file_size", "file_size_formatted", "entity_type", "entity_type_display", "entity_id", "entity_name", "entity_exists", "moved_to_trash", "time_until_deletion", "deletion_timestamp"], "title": "TrashFileInfo", "type": "object"}, "OutputTenantCostTypes": {"properties": {"cost_types": {"additionalProperties": true, "title": "Cost Types", "type": "object"}, "root_id": {"title": "Root Id", "type": "string"}}, "required": ["cost_types", "root_id"], "title": "OutputTenantCostTypes", "type": "object"}, "AddCostType": {"properties": {"name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "description": {"title": "Description", "type": "string"}, "parent": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent"}}, "required": ["name", "description"], "title": "AddCostType", "type": "object"}, "EditCostType": {"properties": {"name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "description": {"title": "Description", "type": "string"}, "parent": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent"}}, "required": ["name", "description"], "title": "EditCostType", "type": "object"}, "OutputTenantResourceTypes": {"properties": {"resources": {"additionalProperties": true, "title": "Resources", "type": "object"}, "root_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Id"}}, "required": ["resources"], "title": "OutputTenantResourceTypes", "type": "object"}, "AddResource": {"properties": {"name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "description": {"title": "Description", "type": "string"}, "parent": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent"}, "timezone": {"title": "Timezone", "type": "string"}}, "required": ["name", "description", "timezone"], "title": "AddResource", "type": "object"}, "EditResource": {"properties": {"name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "description": {"title": "Description", "type": "string"}, "parent": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent"}, "timezone": {"title": "Timezone", "type": "string"}}, "required": ["name", "description", "timezone"], "title": "EditResource", "type": "object"}, "AddResourceCost": {"properties": {"resource": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Resource", "type": "string"}, "cost_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Cost Type", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "value": {"anyOf": [{"exclusiveMinimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Value"}, "currency": {"title": "Currency", "type": "string"}, "uom": {"title": "Uom", "type": "string"}}, "required": ["resource", "cost_type", "name", "value", "currency", "uom"], "title": "AddResourceCost", "type": "object"}, "ResourceCostType": {"properties": {"id": {"title": "Id", "type": "string"}}, "required": ["id"], "title": "ResourceCostType", "type": "object"}, "ResourceCostTypes": {"properties": {"resource": {"title": "Resource", "type": "string"}, "cost_types": {"items": {"$ref": "#/components/schemas/ResourceCostType"}, "title": "Cost Types", "type": "array"}}, "required": ["resource", "cost_types"], "title": "ResourceCostTypes", "type": "object"}, "ResourceCostHistogram": {"properties": {"effective_start_datetime": {"format": "date-time", "title": "Effective Start Datetime", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "value": {"title": "Value", "type": "string"}, "name": {"title": "Name", "type": "string"}}, "required": ["effective_start_datetime", "currency", "value", "name"], "title": "ResourceCostHistogram", "type": "object"}, "ResourceCostOutput": {"properties": {"resource": {"title": "Resource", "type": "string"}, "current_record": {"$ref": "#/components/schemas/ResourceCostRecord"}, "history": {"items": {"$ref": "#/components/schemas/ResourceCostRecord"}, "title": "History", "type": "array"}, "histogram": {"items": {"$ref": "#/components/schemas/ResourceCostHistogram"}, "title": "Histogram", "type": "array"}}, "required": ["resource", "current_record", "history", "histogram"], "title": "ResourceCostOutput", "type": "object"}, "ResourceCostRecord": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "status": {"title": "Status", "type": "string"}, "value": {"title": "Value", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "cost_type": {"title": "Cost Type", "type": "string"}, "effective_start_datetime": {"format": "date-time", "title": "Effective Start Datetime", "type": "string"}, "effective_end_datetime": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Effective End Datetime"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Updated At"}, "created_by": {"title": "Created By", "type": "string"}, "updated_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Updated By"}}, "required": ["id", "name", "status", "value", "currency", "cost_type", "effective_start_datetime", "created_at", "created_by"], "title": "ResourceCostRecord", "type": "object"}, "ResourceCostCorrection": {"properties": {"name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "value": {"anyOf": [{"exclusiveMinimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Value"}, "currency": {"title": "Currency", "type": "string"}, "uom": {"title": "Uom", "type": "string"}}, "required": ["name", "value", "currency", "uom"], "title": "ResourceCostCorrection", "type": "object"}, "ResourceLoadDetailSchema": {"description": "Detailed load data for an individual resource", "properties": {"resource_id": {"title": "Resource Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "period": {"title": "Period", "type": "string"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "week_dates": {"items": {"$ref": "#/components/schemas/DayColumnSchema"}, "title": "Week Dates", "type": "array"}, "week_label": {"title": "Week Label", "type": "string"}, "week_number": {"title": "Week Number", "type": "integer"}, "is_current": {"title": "Is Current", "type": "boolean"}, "is_past": {"title": "Is Past", "type": "boolean"}, "is_future": {"title": "Is Future", "type": "boolean"}, "resource_data": {"anyOf": [{"additionalProperties": true, "type": "object"}, {"type": "null"}], "title": "Resource Data"}, "has_holidays": {"title": "Has Holidays", "type": "boolean"}, "max_bookings": {"title": "Max Bookings", "type": "integer"}, "booking_indices": {"items": {"type": "integer"}, "title": "Booking Indices", "type": "array"}, "total_hours": {"title": "Total Hours", "type": "number"}, "total_available": {"title": "Total Available", "type": "number"}, "utilization_percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Utilization Percentage", "type": "string"}}, "required": ["resource_id", "resource_name", "period", "start_date", "end_date", "week_dates", "week_label", "week_number", "is_current", "is_past", "is_future", "resource_data", "has_holidays", "max_bookings", "booking_indices", "total_hours", "total_available", "utilization_percentage"], "title": "ResourceLoadDetailSchema", "type": "object"}, "ResourceUsageHistogramSchema": {"description": "Resource usage histogram data for visualization", "properties": {"resource_id": {"title": "Resource Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "weeks": {"items": {"$ref": "#/components/schemas/ResourceUsageWeeklySchema"}, "title": "Weeks", "type": "array"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "max_usage": {"title": "Max Usage", "type": "integer"}}, "required": ["resource_id", "resource_name", "weeks", "start_date", "end_date", "max_usage"], "title": "ResourceUsageHistogramSchema", "type": "object"}, "ResourceUsageWeeklySchema": {"description": "Weekly aggregated resource usage data for histogram", "properties": {"week_start": {"format": "date", "title": "Week Start", "type": "string"}, "week_end": {"format": "date", "title": "Week End", "type": "string"}, "week_label": {"title": "Week Label", "type": "string"}, "week_start_formatted": {"title": "Week Start Formatted", "type": "string"}, "week_end_formatted": {"title": "Week End Formatted", "type": "string"}, "planned_usage": {"title": "Planned Usage", "type": "integer"}}, "required": ["week_start", "week_end", "week_label", "week_start_formatted", "week_end_formatted", "planned_usage"], "title": "ResourceUsageWeeklySchema", "type": "object"}, "ResourceUsageDatatableSchema": {"description": "Resource usage datatable with all records", "properties": {"resource_id": {"title": "Resource Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "usage_records": {"items": {"$ref": "#/components/schemas/ResourceUsageRecordSchema"}, "title": "Usage Records", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}, "total_usage": {"title": "Total Usage", "type": "integer"}}, "required": ["resource_id", "resource_name", "usage_records", "total_count", "total_usage"], "title": "ResourceUsageDatatableSchema", "type": "object"}, "ResourceUsageRecordSchema": {"description": "Individual resource usage record for datatable", "properties": {"usage_id": {"title": "Usage Id", "type": "string"}, "date": {"format": "date", "title": "Date", "type": "string"}, "usage_quantity": {"title": "Usage Quantity", "type": "integer"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "project_link": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Link"}, "member_id": {"title": "Member Id", "type": "string"}, "member_name": {"title": "Member Name", "type": "string"}, "member_link": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Link"}, "note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "required": ["usage_id", "date", "usage_quantity", "project_id", "project_name", "member_id", "member_name"], "title": "ResourceUsageRecordSchema", "type": "object"}, "OutputExchangeRate": {"properties": {"id": {"title": "Id", "type": "string"}, "base_currency_code": {"title": "Base Currency Code", "type": "string"}, "base_currency_name": {"title": "Base Currency Name", "type": "string"}, "base_currency_symbol": {"title": "Base Currency Symbol", "type": "string"}, "target_currency_code": {"title": "Target Currency Code", "type": "string"}, "target_currency_name": {"title": "Target Currency Name", "type": "string"}, "target_currency_symbol": {"title": "Target Currency Symbol", "type": "string"}, "rate": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Rate", "type": "string"}, "valid_from": {"format": "date-time", "title": "Valid From", "type": "string"}, "valid_until": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Valid Until"}, "source": {"title": "Source", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "created_by_name": {"title": "Created By Name", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}}, "required": ["id", "base_currency_code", "base_currency_name", "base_currency_symbol", "target_currency_code", "target_currency_name", "target_currency_symbol", "rate", "valid_from", "source", "created_at", "created_by_name", "is_active"], "title": "OutputExchangeRate", "type": "object"}, "OutputExchangeRates": {"properties": {"exchange_rates": {"items": {"$ref": "#/components/schemas/OutputExchangeRate"}, "title": "Exchange Rates", "type": "array"}}, "required": ["exchange_rates"], "title": "OutputExchangeRates", "type": "object"}, "AddExchange": {"properties": {"base_currency": {"maxLength": 3, "minLength": 3, "title": "Base Currency", "type": "string"}, "target_currency": {"maxLength": 3, "minLength": 3, "title": "Target Currency", "type": "string"}, "rate": {"anyOf": [{"exclusiveMinimum": 0.0001, "maximum": 10000.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Rate"}, "valid_from": {"title": "Valid From", "type": "string"}, "source": {"anyOf": [{"maxLength": 100, "type": "string"}, {"type": "null"}], "default": "Manual", "title": "Source"}}, "required": ["base_currency", "target_currency", "rate", "valid_from"], "title": "AddExchange", "type": "object"}, "EditExchange": {"properties": {"rate": {"anyOf": [{"exclusiveMinimum": 0.0001, "maximum": 10000.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}], "title": "Rate"}, "valid_from": {"title": "Valid From", "type": "string"}, "valid_until": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Valid Until"}, "source": {"anyOf": [{"maxLength": 100, "type": "string"}, {"type": "null"}], "title": "Source"}}, "required": ["rate", "valid_from", "source"], "title": "EditExchange", "type": "object"}, "OutputMe": {"description": "Current authenticated user info (for API key validation / Zapier auth test)", "properties": {"id": {"title": "Id", "type": "string"}, "email": {"title": "Email", "type": "string"}, "name": {"title": "Name", "type": "string"}, "tenant_id": {"title": "Tenant Id", "type": "string"}, "tenant_name": {"title": "Tenant Name", "type": "string"}, "tenant_path": {"title": "Tenant Path", "type": "string"}}, "required": ["id", "email", "name", "tenant_id", "tenant_name", "tenant_path"], "title": "OutputMe", "type": "object"}, "OutputApiKey": {"description": "API Key information", "properties": {"external_id_str": {"title": "External Id Str", "type": "string"}, "name": {"title": "Name", "type": "string"}, "key_prefix": {"title": "Key Prefix", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_create": {"title": "Is Create", "type": "boolean"}, "is_read": {"title": "Is Read", "type": "boolean"}, "is_update": {"title": "Is Update", "type": "boolean"}, "is_delete": {"title": "Is Delete", "type": "boolean"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "expires_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Expires At"}, "last_used_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Used At"}, "last_used_ip": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Last Used Ip"}}, "required": ["external_id_str", "name", "key_prefix", "is_active", "is_create", "is_read", "is_update", "is_delete", "created_at"], "title": "OutputApiKey", "type": "object"}, "OutputApiKeyList": {"description": "List of API keys with current time", "properties": {"api_keys": {"items": {"$ref": "#/components/schemas/OutputApiKey"}, "title": "Api Keys", "type": "array"}, "now": {"format": "date-time", "title": "Now", "type": "string"}}, "required": ["api_keys", "now"], "title": "OutputApiKeyList", "type": "object"}, "ApiKeyCreated": {"description": "`add_api_key` answer: the key's id and the raw key, returned once, here only.\nThe browser also gets it via the session for one-time display; an API client\ncreating a key for a service has no session, so this is its only chance.", "properties": {"response_id": {"title": "Response Id", "type": "string"}, "success": {"title": "Success", "type": "boolean"}, "message": {"title": "Message", "type": "string"}, "url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Url"}, "api_key_id": {"title": "Api Key Id", "type": "string"}, "key": {"title": "Key", "type": "string"}}, "required": ["response_id", "success", "message", "api_key_id", "key"], "title": "ApiKeyCreated", "type": "object"}, "AddApiKey": {"description": "Input schema for creating a new API key", "properties": {"name": {"maxLength": 255, "minLength": 1, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "is_create": {"default": false, "title": "Is Create", "type": "boolean"}, "is_read": {"default": true, "title": "Is Read", "type": "boolean"}, "is_update": {"default": false, "title": "Is Update", "type": "boolean"}, "is_delete": {"default": false, "title": "Is Delete", "type": "boolean"}, "expires_at": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Expires At"}}, "required": ["name"], "title": "AddApiKey", "type": "object"}, "EditApiKey": {"description": "Input schema for editing an API key", "properties": {"name": {"anyOf": [{"maxLength": 255, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Name"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "is_create": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Create"}, "is_read": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Read"}, "is_update": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Update"}, "is_delete": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Delete"}, "expires_at": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Expires At"}}, "title": "EditApiKey", "type": "object"}, "CalendarToken": {"description": "Calendar subscription token data", "properties": {"id": {"title": "Id", "type": "string"}, "feed_type": {"title": "Feed Type", "type": "string"}, "entity_id": {"title": "Entity Id", "type": "string"}, "entity_name": {"title": "Entity Name", "type": "string"}, "feed_url": {"title": "Feed Url", "type": "string"}, "last_accessed": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Accessed"}}, "required": ["id", "feed_type", "entity_id", "entity_name", "feed_url", "last_accessed"], "title": "CalendarToken", "type": "object"}, "OutputCalendarTokens": {"description": "Output schema for listing calendar tokens", "properties": {"tokens": {"items": {"$ref": "#/components/schemas/CalendarToken"}, "title": "Tokens", "type": "array"}}, "required": ["tokens"], "title": "OutputCalendarTokens", "type": "object"}, "CreateCalendarToken": {"description": "Input schema for creating a calendar subscription token", "properties": {"feed_type": {"pattern": "^(team|resource|proposal|org)$", "title": "Feed Type", "type": "string"}, "entity_id": {"title": "Entity Id", "type": "string"}}, "required": ["feed_type", "entity_id"], "title": "CreateCalendarToken", "type": "object"}, "OutputHoliday": {"description": "Output schema for a single holiday", "properties": {"id": {"title": "Id", "type": "string"}, "date": {"format": "date", "title": "Date", "type": "string"}, "name": {"title": "Name", "type": "string"}, "territory": {"title": "Territory", "type": "string"}}, "required": ["id", "date", "name", "territory"], "title": "OutputHoliday", "type": "object"}, "OutputHolidays": {"description": "Output schema for listing holidays", "properties": {"holidays": {"items": {"$ref": "#/components/schemas/OutputHoliday"}, "title": "Holidays", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["holidays", "total"], "title": "OutputHolidays", "type": "object"}, "AddHoliday": {"description": "Input schema for adding a holiday", "properties": {"date": {"title": "Date", "type": "string"}, "name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "territory": {"maxLength": 50, "minLength": 1, "title": "Territory", "type": "string"}}, "required": ["date", "name", "territory"], "title": "AddHoliday", "type": "object"}, "EditHoliday": {"description": "Input schema for editing a holiday", "properties": {"date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Date"}, "name": {"anyOf": [{"maxLength": 100, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "Name"}, "territory": {"anyOf": [{"maxLength": 50, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Territory"}}, "title": "EditHoliday", "type": "object"}, "OutputTeamBooking": {"description": "Output schema for a single team booking", "properties": {"id": {"title": "Id", "type": "string"}, "member_id": {"title": "Member Id", "type": "string"}, "member_name": {"title": "Member Name", "type": "string"}, "member_avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Avatar Url"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "product_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Name"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "hours_per_day": {"title": "Hours Per Day", "type": "integer"}, "name": {"title": "Name", "type": "string"}}, "required": ["id", "member_id", "member_name", "project_id", "project_name", "start_date", "end_date", "hours_per_day", "name"], "title": "OutputTeamBooking", "type": "object"}, "OutputTeamBookings": {"description": "Output schema for listing team bookings", "properties": {"bookings": {"items": {"$ref": "#/components/schemas/OutputTeamBooking"}, "title": "Bookings", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["bookings", "total"], "title": "OutputTeamBookings", "type": "object"}, "AddTeamBooking": {"description": "Input schema for adding a team booking", "properties": {"project": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Project", "type": "string"}, "member": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Member", "type": "string"}, "product": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Product"}, "start_date": {"title": "Start Date", "type": "string"}, "end_date": {"title": "End Date", "type": "string"}, "hours_per_day": {"anyOf": [{"maximum": 24, "minimum": 0, "type": "integer"}, {"type": "null"}], "default": 0, "title": "Hours Per Day"}, "name": {"maxLength": 30, "minLength": 1, "title": "Name", "type": "string"}, "only_working_days": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Only Working Days"}}, "required": ["project", "member", "start_date", "end_date", "name"], "title": "AddTeamBooking", "type": "object"}, "EditTeamBooking": {"description": "Input schema for editing a team booking", "properties": {"member": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Member", "type": "string"}, "product": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Product"}, "start_date": {"title": "Start Date", "type": "string"}, "end_date": {"title": "End Date", "type": "string"}, "hours_per_day": {"anyOf": [{"maximum": 24, "minimum": 0, "type": "integer"}, {"type": "null"}], "default": 0, "title": "Hours Per Day"}, "name": {"maxLength": 30, "minLength": 1, "title": "Name", "type": "string"}, "only_working_days": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Only Working Days"}}, "required": ["member", "start_date", "end_date", "name"], "title": "EditTeamBooking", "type": "object"}, "OutputResourceBooking": {"description": "Output schema for a single resource booking", "properties": {"id": {"title": "Id", "type": "string"}, "resource_id": {"title": "Resource Id", "type": "string"}, "resource_name": {"title": "Resource Name", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "product_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Name"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "hours_per_day": {"title": "Hours Per Day", "type": "integer"}, "name": {"title": "Name", "type": "string"}}, "required": ["id", "resource_id", "resource_name", "project_id", "project_name", "start_date", "end_date", "hours_per_day", "name"], "title": "OutputResourceBooking", "type": "object"}, "OutputResourceBookings": {"description": "Output schema for listing resource bookings", "properties": {"bookings": {"items": {"$ref": "#/components/schemas/OutputResourceBooking"}, "title": "Bookings", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["bookings", "total"], "title": "OutputResourceBookings", "type": "object"}, "AddResourceBooking": {"description": "Input schema for adding a resource booking", "properties": {"project": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Project", "type": "string"}, "resource": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Resource", "type": "string"}, "product": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Product"}, "start_date": {"title": "Start Date", "type": "string"}, "end_date": {"title": "End Date", "type": "string"}, "hours_per_day": {"anyOf": [{"maximum": 24, "minimum": 0, "type": "integer"}, {"type": "null"}], "default": 0, "title": "Hours Per Day"}, "name": {"maxLength": 30, "minLength": 1, "title": "Name", "type": "string"}}, "required": ["project", "resource", "start_date", "end_date", "name"], "title": "AddResourceBooking", "type": "object"}, "EditResourceBooking": {"description": "Input schema for editing a resource booking", "properties": {"resource": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Resource", "type": "string"}, "product": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Product"}, "start_date": {"title": "Start Date", "type": "string"}, "end_date": {"title": "End Date", "type": "string"}, "hours_per_day": {"anyOf": [{"maximum": 24, "minimum": 0, "type": "integer"}, {"type": "null"}], "default": 0, "title": "Hours Per Day"}, "name": {"maxLength": 30, "minLength": 1, "title": "Name", "type": "string"}}, "required": ["resource", "start_date", "end_date", "name"], "title": "EditResourceBooking", "type": "object"}, "OutputSupportRequestType": {"description": "Output schema for a single support request type", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal": {"title": "Internal", "type": "boolean"}, "active": {"title": "Active", "type": "boolean"}, "sequence_no": {"title": "Sequence No", "type": "integer"}}, "required": ["id", "name", "internal", "active", "sequence_no"], "title": "OutputSupportRequestType", "type": "object"}, "OutputSupportRequestTypes": {"description": "Output schema for listing support request types", "properties": {"external_types": {"items": {"$ref": "#/components/schemas/OutputSupportRequestType"}, "title": "External Types", "type": "array"}, "internal_types": {"items": {"$ref": "#/components/schemas/OutputSupportRequestType"}, "title": "Internal Types", "type": "array"}, "external_count": {"title": "External Count", "type": "integer"}, "internal_count": {"title": "Internal Count", "type": "integer"}, "total": {"title": "Total", "type": "integer"}}, "required": ["external_types", "internal_types", "external_count", "internal_count", "total"], "title": "OutputSupportRequestTypes", "type": "object"}, "AddSupportRequestType": {"description": "Input schema for adding a support request type", "properties": {"name": {"maxLength": 25, "minLength": 1, "title": "Name", "type": "string"}, "internal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Internal"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Active"}, "sequence_no": {"anyOf": [{"maximum": 999, "minimum": 1, "type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}}, "required": ["name"], "title": "AddSupportRequestType", "type": "object"}, "EditSupportRequestType": {"description": "Input schema for editing a support request type", "properties": {"name": {"maxLength": 25, "minLength": 1, "title": "Name", "type": "string"}, "internal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Internal"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Active"}, "sequence_no": {"anyOf": [{"maximum": 999, "minimum": 1, "type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}}, "required": ["name"], "title": "EditSupportRequestType", "type": "object"}, "OutputSupportRequestSeverities": {"description": "Output schema for listing support request severities", "properties": {"external_severities": {"items": {"$ref": "#/components/schemas/OutputSupportRequestSeverity"}, "title": "External Severities", "type": "array"}, "internal_severities": {"items": {"$ref": "#/components/schemas/OutputSupportRequestSeverity"}, "title": "Internal Severities", "type": "array"}, "external_count": {"title": "External Count", "type": "integer"}, "internal_count": {"title": "Internal Count", "type": "integer"}, "total": {"title": "Total", "type": "integer"}}, "required": ["external_severities", "internal_severities", "external_count", "internal_count", "total"], "title": "OutputSupportRequestSeverities", "type": "object"}, "OutputSupportRequestSeverity": {"description": "Output schema for a single support request severity", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal": {"title": "Internal", "type": "boolean"}, "active": {"title": "Active", "type": "boolean"}, "sequence_no": {"title": "Sequence No", "type": "integer"}, "score": {"title": "Score", "type": "integer"}}, "required": ["id", "name", "internal", "active", "sequence_no", "score"], "title": "OutputSupportRequestSeverity", "type": "object"}, "AddSupportRequestSeverity": {"description": "Input schema for adding a support request severity", "properties": {"name": {"maxLength": 25, "minLength": 1, "title": "Name", "type": "string"}, "internal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Internal"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Active"}, "sequence_no": {"anyOf": [{"maximum": 999, "minimum": 1, "type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}, "score": {"default": 1, "maximum": 100, "minimum": 1, "title": "Score", "type": "integer"}}, "required": ["name"], "title": "AddSupportRequestSeverity", "type": "object"}, "EditSupportRequestSeverity": {"description": "Input schema for editing a support request severity", "properties": {"name": {"maxLength": 25, "minLength": 1, "title": "Name", "type": "string"}, "internal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Internal"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Active"}, "sequence_no": {"anyOf": [{"maximum": 999, "minimum": 1, "type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}, "score": {"default": 1, "maximum": 100, "minimum": 1, "title": "Score", "type": "integer"}}, "required": ["name"], "title": "EditSupportRequestSeverity", "type": "object"}, "OutputSupportRequestStatus": {"description": "Output schema for a single support request status", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "lifecycle": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lifecycle"}, "lifecycle_display": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lifecycle Display"}, "internal": {"title": "Internal", "type": "boolean"}, "active": {"title": "Active", "type": "boolean"}, "sequence_no": {"title": "Sequence No", "type": "integer"}}, "required": ["id", "name", "internal", "active", "sequence_no"], "title": "OutputSupportRequestStatus", "type": "object"}, "OutputSupportRequestStatuses": {"description": "Output schema for listing support request statuses", "properties": {"external_statuses": {"items": {"$ref": "#/components/schemas/OutputSupportRequestStatus"}, "title": "External Statuses", "type": "array"}, "internal_statuses": {"items": {"$ref": "#/components/schemas/OutputSupportRequestStatus"}, "title": "Internal Statuses", "type": "array"}, "external_count": {"title": "External Count", "type": "integer"}, "internal_count": {"title": "Internal Count", "type": "integer"}, "total": {"title": "Total", "type": "integer"}}, "required": ["external_statuses", "internal_statuses", "external_count", "internal_count", "total"], "title": "OutputSupportRequestStatuses", "type": "object"}, "AddSupportRequestStatus": {"description": "Input schema for adding a support request status", "properties": {"name": {"maxLength": 25, "minLength": 1, "title": "Name", "type": "string"}, "lifecycle": {"default": "NEW", "enum": ["NEW", "IN_PROGRESS", "PENDING_REQUESTER", "PENDING_APPROVAL", "CLOSED"], "title": "Lifecycle", "type": "string"}, "internal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Internal"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Active"}, "sequence_no": {"anyOf": [{"maximum": 999, "minimum": 1, "type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}}, "required": ["name"], "title": "AddSupportRequestStatus", "type": "object"}, "EditSupportRequestStatus": {"description": "Input schema for editing a support request status", "properties": {"name": {"maxLength": 25, "minLength": 1, "title": "Name", "type": "string"}, "lifecycle": {"enum": ["NEW", "IN_PROGRESS", "PENDING_REQUESTER", "PENDING_APPROVAL", "CLOSED"], "title": "Lifecycle", "type": "string"}, "internal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Internal"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Active"}, "sequence_no": {"anyOf": [{"maximum": 999, "minimum": 1, "type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}}, "required": ["name", "lifecycle"], "title": "EditSupportRequestStatus", "type": "object"}, "OutputSupportRequestQueue": {"description": "Output schema for a single support request queue", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal": {"title": "Internal", "type": "boolean"}, "active": {"title": "Active", "type": "boolean"}, "sequence_no": {"title": "Sequence No", "type": "integer"}, "owner_role_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Role Id"}, "owner_role_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Role Name"}, "automatically_assign": {"title": "Automatically Assign", "type": "boolean"}, "open_count": {"default": 0, "title": "Open Count", "type": "integer"}, "unassigned_count": {"default": 0, "title": "Unassigned Count", "type": "integer"}}, "required": ["id", "name", "internal", "active", "sequence_no", "automatically_assign"], "title": "OutputSupportRequestQueue", "type": "object"}, "OutputSupportRequestQueues": {"description": "Output schema for listing support request queues", "properties": {"external_queues": {"items": {"$ref": "#/components/schemas/OutputSupportRequestQueue"}, "title": "External Queues", "type": "array"}, "internal_queues": {"items": {"$ref": "#/components/schemas/OutputSupportRequestQueue"}, "title": "Internal Queues", "type": "array"}, "total_external_queues": {"title": "Total External Queues", "type": "integer"}, "total_internal_queues": {"title": "Total Internal Queues", "type": "integer"}, "total_queues": {"title": "Total Queues", "type": "integer"}, "assigned_open_count": {"title": "Assigned Open Count", "type": "integer"}}, "required": ["external_queues", "internal_queues", "total_external_queues", "total_internal_queues", "total_queues", "assigned_open_count"], "title": "OutputSupportRequestQueues", "type": "object"}, "AddSupportRequestQueue": {"description": "Input schema for adding a support request queue", "properties": {"name": {"maxLength": 25, "minLength": 1, "title": "Name", "type": "string"}, "internal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Internal"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Active"}, "sequence_no": {"anyOf": [{"maximum": 999, "minimum": 1, "type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}, "owner_role_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Owner Role Id"}, "automatically_assign": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Automatically Assign"}}, "required": ["name"], "title": "AddSupportRequestQueue", "type": "object"}, "EditSupportRequestQueue": {"description": "Input schema for editing a support request queue", "properties": {"name": {"maxLength": 25, "minLength": 1, "title": "Name", "type": "string"}, "internal": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Internal"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Active"}, "sequence_no": {"anyOf": [{"maximum": 999, "minimum": 1, "type": "integer"}, {"type": "null"}], "default": 1, "title": "Sequence No"}, "owner_role_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Owner Role Id"}, "automatically_assign": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Automatically Assign"}}, "required": ["name"], "title": "EditSupportRequestQueue", "type": "object"}, "AddInternalSupportRequest": {"description": "Input schema for creating internal support request", "properties": {"request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}}, "required": ["request_type", "request_severity", "title", "description"], "title": "AddInternalSupportRequest", "type": "object"}, "AddInternalSupportRequestForOrg": {"description": "Input schema for creating internal support request for a specific organization", "properties": {"request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "customer_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Customer Id", "type": "string"}}, "required": ["request_type", "request_severity", "title", "description", "customer_id"], "title": "AddInternalSupportRequestForOrg", "type": "object"}, "AddInternalSupportRequestForProposal": {"description": "Input schema for creating internal support request for a specific proposal", "properties": {"request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "project_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Project Id", "type": "string"}, "customer_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Id"}}, "required": ["request_type", "request_severity", "title", "description", "project_id"], "title": "AddInternalSupportRequestForProposal", "type": "object"}, "AddInternalSupportRequestForResource": {"description": "Input schema for creating internal support request for a specific resource", "properties": {"request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "resource_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Resource Id", "type": "string"}}, "required": ["request_type", "request_severity", "title", "description", "resource_id"], "title": "AddInternalSupportRequestForResource", "type": "object"}, "AddInternalSupportRequestForWorkItem": {"description": "Input schema for creating internal support request for a specific work item", "properties": {"request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "work_item_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Work Item Id", "type": "string"}}, "required": ["request_type", "request_severity", "title", "description", "work_item_id"], "title": "AddInternalSupportRequestForWorkItem", "type": "object"}, "AddExternalSupportRequestForCustomer": {"description": "Input schema for creating an external support request on behalf of a customer.", "properties": {"requester_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Requester Id", "type": "string"}, "request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}}, "required": ["requester_id", "request_type", "request_severity", "title", "description"], "title": "AddExternalSupportRequestForCustomer", "type": "object"}, "MySupportRequestListItem": {"description": "Output schema for a support request in My Support Requests list", "properties": {"id": {"title": "Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "public_reference": {"title": "Public Reference", "type": "string"}, "type_name": {"title": "Type Name", "type": "string"}, "severity_name": {"title": "Severity Name", "type": "string"}, "status_name": {"title": "Status Name", "type": "string"}, "status_lifecycle": {"title": "Status Lifecycle", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["id", "title", "public_reference", "type_name", "severity_name", "status_name", "status_lifecycle", "created_at", "updated_at"], "title": "MySupportRequestListItem", "type": "object"}, "OutputMySupportRequests": {"description": "Output schema for listing user's support requests", "properties": {"support_requests": {"items": {"$ref": "#/components/schemas/MySupportRequestListItem"}, "title": "Support Requests", "type": "array"}}, "required": ["support_requests"], "title": "OutputMySupportRequests", "type": "object"}, "OutputInternalSupportRequest": {"description": "Output schema for internal support request detail card", "properties": {"external_id_str": {"title": "External Id Str", "type": "string"}, "public_reference": {"title": "Public Reference", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"title": "Description", "type": "string"}, "status_lifecycle": {"title": "Status Lifecycle", "type": "string"}, "status_name": {"title": "Status Name", "type": "string"}, "type_name": {"title": "Type Name", "type": "string"}, "severity_name": {"title": "Severity Name", "type": "string"}, "has_assignee": {"title": "Has Assignee", "type": "boolean"}, "assignee_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Assignee Name"}, "can_assign_to_self": {"default": false, "title": "Can Assign To Self", "type": "boolean"}, "requester_external_id": {"title": "Requester External Id", "type": "string"}, "queue_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Queue Name"}, "queue_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Queue Id"}, "resource_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Name"}, "project_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Name"}, "project_customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Customer Name"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "work_item_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Name"}, "work_item_hierarchy_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Hierarchy Id"}, "reported_asset_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reported Asset Name"}, "root_cause_asset_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Cause Asset Name"}, "resource_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Id"}, "project_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "project_customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Customer Id"}, "customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "work_item_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Id"}, "assignee_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Assignee Id"}, "reported_asset_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reported Asset Id"}, "root_cause_asset_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Cause Asset Id"}, "request_type": {"title": "Request Type", "type": "string"}, "card_title": {"title": "Card Title", "type": "string"}, "author_info": {"title": "Author Info", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "can_reopen": {"default": false, "title": "Can Reopen", "type": "boolean"}, "resolution": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resolution"}, "resolution_display": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resolution Display"}, "closure_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Closure Reason"}, "solution_pending": {"default": false, "title": "Solution Pending", "type": "boolean"}}, "required": ["external_id_str", "public_reference", "title", "description", "status_lifecycle", "status_name", "type_name", "severity_name", "has_assignee", "requester_external_id", "request_type", "card_title", "author_info", "created_at", "updated_at"], "title": "OutputInternalSupportRequest", "type": "object"}, "OutputExternalSupportRequest": {"description": "Output schema for external support request detail card", "properties": {"external_id_str": {"title": "External Id Str", "type": "string"}, "public_reference": {"title": "Public Reference", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"title": "Description", "type": "string"}, "status_lifecycle": {"title": "Status Lifecycle", "type": "string"}, "status_name": {"title": "Status Name", "type": "string"}, "type_name": {"title": "Type Name", "type": "string"}, "severity_name": {"title": "Severity Name", "type": "string"}, "has_assignee": {"title": "Has Assignee", "type": "boolean"}, "assignee_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Assignee Name"}, "can_assign_to_self": {"default": false, "title": "Can Assign To Self", "type": "boolean"}, "requester_external_id": {"title": "Requester External Id", "type": "string"}, "queue_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Queue Name"}, "queue_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Queue Id"}, "resource_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Name"}, "project_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Name"}, "project_customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Customer Name"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "work_item_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Name"}, "work_item_hierarchy_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Hierarchy Id"}, "reported_asset_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reported Asset Name"}, "root_cause_asset_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Cause Asset Name"}, "resource_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resource Id"}, "project_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "project_customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Customer Id"}, "customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "work_item_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Item Id"}, "assignee_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Assignee Id"}, "reported_asset_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reported Asset Id"}, "root_cause_asset_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Cause Asset Id"}, "request_type": {"title": "Request Type", "type": "string"}, "card_title": {"title": "Card Title", "type": "string"}, "author_info": {"title": "Author Info", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "can_reopen": {"default": false, "title": "Can Reopen", "type": "boolean"}, "resolution": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resolution"}, "resolution_display": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resolution Display"}, "closure_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Closure Reason"}, "solution_pending": {"default": false, "title": "Solution Pending", "type": "boolean"}, "is_billed": {"default": false, "title": "Is Billed", "type": "boolean"}, "payment_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Payment Name"}, "proposal_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Id"}}, "required": ["external_id_str", "public_reference", "title", "description", "status_lifecycle", "status_name", "type_name", "severity_name", "has_assignee", "requester_external_id", "request_type", "card_title", "author_info", "created_at", "updated_at"], "title": "OutputExternalSupportRequest", "type": "object"}, "ChangeExternalSupportRequestStatus": {"properties": {"status_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Status Id", "type": "string"}, "reason": {"title": "Reason", "type": "string"}}, "required": ["status_id", "reason"], "title": "ChangeExternalSupportRequestStatus", "type": "object"}, "ReassignExternalSupportRequest": {"properties": {"assignee_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Assignee Id", "type": "string"}}, "required": ["assignee_id"], "title": "ReassignExternalSupportRequest", "type": "object"}, "CloseExternalSupportRequest": {"properties": {"status_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Status Id", "type": "string"}, "resolution": {"enum": ["FIXED", "DONE", "WONT_FIX", "DUPLICATE", "CANNOT_REPRODUCE", "NOT_AN_ISSUE", "NO_LONGER_REQUIRED", "EXPIRED", "MERGED"], "title": "Resolution", "type": "string"}, "reason": {"title": "Reason", "type": "string"}}, "required": ["status_id", "resolution", "reason"], "title": "CloseExternalSupportRequest", "type": "object"}, "EditExternalSupportRequest": {"properties": {"title": {"maxLength": 255, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "root_cause_asset": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Cause Asset"}}, "required": ["title", "description", "request_type", "request_severity"], "title": "EditExternalSupportRequest", "type": "object"}, "TransferSupportRequestQueue": {"description": "Input schema for transferring a support request to a different queue", "properties": {"queue_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Queue Id", "type": "string"}, "reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reason"}}, "required": ["queue_id"], "title": "TransferSupportRequestQueue", "type": "object"}, "AddExternalSupportRequestComment": {"properties": {"support_request_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Support Request Id", "type": "string"}, "content": {"minLength": 1, "title": "Content", "type": "string"}, "parent_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent Id"}, "show_to_requester": {"default": false, "title": "Show To Requester", "type": "boolean"}}, "required": ["support_request_id", "content"], "title": "AddExternalSupportRequestComment", "type": "object"}, "EditExternalSupportRequestComment": {"properties": {"content": {"maxLength": 5000, "minLength": 1, "title": "Content", "type": "string"}}, "required": ["content"], "title": "EditExternalSupportRequestComment", "type": "object"}, "ChangeInternalSupportRequestStatus": {"description": "Input schema for changing internal support request status", "properties": {"status_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Status Id", "type": "string"}, "reason": {"description": "Reason for status change", "maxLength": 500, "minLength": 1, "title": "Reason", "type": "string"}}, "required": ["status_id", "reason"], "title": "ChangeInternalSupportRequestStatus", "type": "object"}, "ReassignInternalSupportRequest": {"description": "Input schema for reassigning internal support request", "properties": {"assignee_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Assignee Id", "type": "string"}}, "required": ["assignee_id"], "title": "ReassignInternalSupportRequest", "type": "object"}, "CloseInternalSupportRequest": {"description": "Input schema for closing internal support request with resolution", "properties": {"status_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Status Id", "type": "string"}, "resolution": {"enum": ["FIXED", "DONE", "WONT_FIX", "DUPLICATE", "CANNOT_REPRODUCE", "NOT_AN_ISSUE", "NO_LONGER_REQUIRED", "EXPIRED", "MERGED"], "title": "Resolution", "type": "string"}, "reason": {"description": "Reason for closing the support request", "maxLength": 500, "minLength": 1, "title": "Reason", "type": "string"}}, "required": ["status_id", "resolution", "reason"], "title": "CloseInternalSupportRequest", "type": "object"}, "EditInternalSupportRequest": {"description": "Input schema for editing internal support request", "properties": {"title": {"description": "Brief summary of the request", "maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"description": "Detailed description of the support request", "minLength": 1, "title": "Description", "type": "string"}, "request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "root_cause_asset": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Cause Asset"}}, "required": ["title", "description", "request_type", "request_severity"], "title": "EditInternalSupportRequest", "type": "object"}, "OutputInternalSupportRequestTimeline": {"description": "Output schema for internal support request timeline", "properties": {"events": {"items": {"$ref": "#/components/schemas/SupportRequestTimelineEvent"}, "title": "Events", "type": "array"}, "event_count": {"title": "Event Count", "type": "integer"}, "support_request_id": {"title": "Support Request Id", "type": "string"}, "replies_map": {"additionalProperties": {"items": {"$ref": "#/components/schemas/SupportRequestCommentReply"}, "type": "array"}, "default": {}, "title": "Replies Map", "type": "object"}, "status_lifecycle": {"default": "", "title": "Status Lifecycle", "type": "string"}}, "required": ["events", "event_count", "support_request_id"], "title": "OutputInternalSupportRequestTimeline", "type": "object"}, "SupportRequestCommentReply": {"description": "Schema for a comment reply", "properties": {"comment_id": {"title": "Comment Id", "type": "string"}, "author_name": {"title": "Author Name", "type": "string"}, "author_id": {"title": "Author Id", "type": "string"}, "content": {"title": "Content", "type": "string"}, "timestamp": {"format": "date-time", "title": "Timestamp", "type": "string"}, "edited": {"default": false, "title": "Edited", "type": "boolean"}, "show_to_requester": {"default": false, "title": "Show To Requester", "type": "boolean"}}, "required": ["comment_id", "author_name", "author_id", "content", "timestamp"], "title": "SupportRequestCommentReply", "type": "object"}, "SupportRequestTimelineEvent": {"description": "Output schema for a single timeline event or comment", "properties": {"timestamp": {"format": "date-time", "title": "Timestamp", "type": "string"}, "author_name": {"title": "Author Name", "type": "string"}, "author_id": {"title": "Author Id", "type": "string"}, "event_type": {"title": "Event Type", "type": "string"}, "event_type_display": {"title": "Event Type Display", "type": "string"}, "reason": {"title": "Reason", "type": "string"}, "old_status_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Old Status Name"}, "new_status_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "New Status Name"}, "old_assignee_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Old Assignee Name"}, "new_assignee_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "New Assignee Name"}, "old_queue_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Old Queue Name"}, "new_queue_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "New Queue Name"}, "is_comment": {"default": false, "title": "Is Comment", "type": "boolean"}, "comment_content": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Comment Content"}, "comment_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Comment Id"}, "parent_comment_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Comment Id"}, "edited": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Edited"}, "show_to_requester": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Show To Requester"}}, "required": ["timestamp", "author_name", "author_id", "event_type", "event_type_display", "reason"], "title": "SupportRequestTimelineEvent", "type": "object"}, "OutputExternalSupportRequestTimeline": {"description": "Output schema for external support request timeline", "properties": {"events": {"items": {"$ref": "#/components/schemas/SupportRequestTimelineEvent"}, "title": "Events", "type": "array"}, "event_count": {"title": "Event Count", "type": "integer"}, "support_request_id": {"title": "Support Request Id", "type": "string"}, "replies_map": {"additionalProperties": {"items": {"$ref": "#/components/schemas/SupportRequestCommentReply"}, "type": "array"}, "default": {}, "title": "Replies Map", "type": "object"}, "status_lifecycle": {"default": "", "title": "Status Lifecycle", "type": "string"}}, "required": ["events", "event_count", "support_request_id"], "title": "OutputExternalSupportRequestTimeline", "type": "object"}, "AddInternalSupportRequestComment": {"description": "Input schema for adding a comment to an internal support request", "properties": {"support_request_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Support Request Id", "type": "string"}, "content": {"minLength": 1, "title": "Content", "type": "string"}, "parent_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent Id"}}, "required": ["support_request_id", "content"], "title": "AddInternalSupportRequestComment", "type": "object"}, "EditInternalSupportRequestComment": {"description": "Input schema for editing an internal support request comment", "properties": {"content": {"description": "Comment content", "maxLength": 5000, "minLength": 1, "title": "Content", "type": "string"}}, "required": ["content"], "title": "EditInternalSupportRequestComment", "type": "object"}, "OutputQueueRule": {"description": "Output schema for a single queue rule", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "priority": {"title": "Priority", "type": "integer"}, "active": {"title": "Active", "type": "boolean"}, "internal": {"title": "Internal", "type": "boolean"}, "target_queue_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Target Queue Id"}, "target_queue_name": {"title": "Target Queue Name", "type": "string"}, "target_queue_active": {"title": "Target Queue Active", "type": "boolean"}, "request_type_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Request Type Id"}, "request_type_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Request Type Name"}, "request_severity_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Request Severity Id"}, "request_severity_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Request Severity Name"}, "specificity_score": {"title": "Specificity Score", "type": "integer"}}, "required": ["id", "name", "description", "priority", "active", "internal", "target_queue_name", "target_queue_active", "specificity_score"], "title": "OutputQueueRule", "type": "object"}, "OutputQueueRules": {"description": "Output schema for listing queue rules", "properties": {"rules": {"items": {"$ref": "#/components/schemas/OutputQueueRule"}, "title": "Rules", "type": "array"}, "total_rules": {"title": "Total Rules", "type": "integer"}}, "required": ["rules", "total_rules"], "title": "OutputQueueRules", "type": "object"}, "AddQueueRule": {"description": "Input schema for adding a queue routing rule", "properties": {"name": {"maxLength": 255, "minLength": 1, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "priority": {"default": 100, "maximum": 9999, "minimum": 1, "title": "Priority", "type": "integer"}, "active": {"default": true, "title": "Active", "type": "boolean"}, "target_queue": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Target Queue", "type": "string"}, "request_type": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Request Type"}, "request_severity": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Request Severity"}}, "required": ["name", "target_queue"], "title": "AddQueueRule", "type": "object"}, "EditQueueRule": {"description": "Input schema for editing a queue routing rule", "properties": {"name": {"maxLength": 255, "minLength": 1, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "priority": {"default": 100, "maximum": 9999, "minimum": 1, "title": "Priority", "type": "integer"}, "active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Active"}, "target_queue": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Target Queue", "type": "string"}, "request_type": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Request Type"}, "request_severity": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Request Severity"}}, "required": ["name", "target_queue"], "title": "EditQueueRule", "type": "object"}, "OutputProcess": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "allow_backward_move": {"title": "Allow Backward Move", "type": "boolean"}, "allow_skip_move": {"title": "Allow Skip Move", "type": "boolean"}, "stage_count": {"default": 0, "title": "Stage Count", "type": "integer"}, "item_count": {"default": 0, "title": "Item Count", "type": "integer"}}, "required": ["id", "name", "description", "is_active", "allow_backward_move", "allow_skip_move"], "title": "OutputProcess", "type": "object"}, "OutputProcesses": {"properties": {"processes": {"items": {"$ref": "#/components/schemas/OutputProcess"}, "title": "Processes", "type": "array"}}, "required": ["processes"], "title": "OutputProcesses", "type": "object"}, "AddProcess": {"properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "allow_backward_move": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Allow Backward Move"}, "allow_skip_move": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Allow Skip Move"}}, "required": ["name"], "title": "AddProcess", "type": "object"}, "EditProcess": {"properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "allow_backward_move": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Allow Backward Move"}, "allow_skip_move": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Allow Skip Move"}}, "required": ["name"], "title": "EditProcess", "type": "object"}, "OutputProcessStage": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "instructions": {"title": "Instructions", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "sequence_no": {"title": "Sequence No", "type": "integer"}, "is_active": {"title": "Is Active", "type": "boolean"}, "requires_approval": {"title": "Requires Approval", "type": "boolean"}, "can_link": {"default": false, "title": "Can Link", "type": "boolean"}, "item_count": {"default": 0, "title": "Item Count", "type": "integer"}, "linked_stages": {"default": [], "items": {"$ref": "#/components/schemas/OutputProcessStageLink"}, "title": "Linked Stages", "type": "array"}}, "required": ["id", "name", "description", "instructions", "stage_type", "sequence_no", "is_active", "requires_approval"], "title": "OutputProcessStage", "type": "object"}, "OutputProcessStageLink": {"description": "A cross-process link attached to this stage", "properties": {"link_id": {"title": "Link Id", "type": "string"}, "direction": {"title": "Direction", "type": "string"}, "remote_stage_id": {"title": "Remote Stage Id", "type": "string"}, "remote_stage_name": {"title": "Remote Stage Name", "type": "string"}, "remote_process_id": {"title": "Remote Process Id", "type": "string"}, "remote_process_name": {"title": "Remote Process Name", "type": "string"}}, "required": ["link_id", "direction", "remote_stage_id", "remote_stage_name", "remote_process_id", "remote_process_name"], "title": "OutputProcessStageLink", "type": "object"}, "OutputProcessStages": {"properties": {"process_id": {"title": "Process Id", "type": "string"}, "process_name": {"title": "Process Name", "type": "string"}, "stages": {"items": {"$ref": "#/components/schemas/OutputProcessStage"}, "title": "Stages", "type": "array"}}, "required": ["process_id", "process_name", "stages"], "title": "OutputProcessStages", "type": "object"}, "AddProcessStage": {"properties": {"process": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Process", "type": "string"}, "name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "instructions": {"default": "", "title": "Instructions", "type": "string"}, "stage_type": {"enum": ["input", "internal", "output", "final"], "title": "Stage Type", "type": "string"}, "sequence_no": {"exclusiveMaximum": 1000, "exclusiveMinimum": 0, "title": "Sequence No", "type": "integer"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Is Active"}, "requires_approval": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Requires Approval"}}, "required": ["process", "name", "stage_type", "sequence_no"], "title": "AddProcessStage", "type": "object"}, "EditProcessStage": {"properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "instructions": {"default": "", "title": "Instructions", "type": "string"}, "sequence_no": {"exclusiveMaximum": 1000, "exclusiveMinimum": 0, "title": "Sequence No", "type": "integer"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "requires_approval": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Requires Approval"}}, "required": ["name", "sequence_no"], "title": "EditProcessStage", "type": "object"}, "AddProcessLink": {"properties": {"source_stage": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Source Stage", "type": "string"}, "target_stage": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Target Stage", "type": "string"}}, "required": ["source_stage", "target_stage"], "title": "AddProcessLink", "type": "object"}, "OutputProcessParticipation": {"properties": {"id": {"title": "Id", "type": "string"}, "role_id": {"title": "Role Id", "type": "string"}, "role_name": {"title": "Role Name", "type": "string"}, "participation_type": {"title": "Participation Type", "type": "string"}, "participation_type_key": {"default": "", "title": "Participation Type Key", "type": "string"}}, "required": ["id", "role_id", "role_name", "participation_type"], "title": "OutputProcessParticipation", "type": "object"}, "OutputProcessParticipations": {"properties": {"process_id": {"title": "Process Id", "type": "string"}, "process_name": {"title": "Process Name", "type": "string"}, "participations": {"items": {"$ref": "#/components/schemas/OutputProcessParticipation"}, "title": "Participations", "type": "array"}}, "required": ["process_id", "process_name", "participations"], "title": "OutputProcessParticipations", "type": "object"}, "AddProcessParticipation": {"properties": {"process": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Process", "type": "string"}, "role": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Role", "type": "string"}, "participation_type": {"enum": ["submitter", "worker", "reviewer", "supervisor", "observer"], "title": "Participation Type", "type": "string"}}, "required": ["process", "role", "participation_type"], "title": "AddProcessParticipation", "type": "object"}, "OutputProcessAssignee": {"description": "A team member who may own an item in this process.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}}, "required": ["id", "name"], "title": "OutputProcessAssignee", "type": "object"}, "OutputProcessSummaries": {"properties": {"processes": {"items": {"$ref": "#/components/schemas/OutputProcessSummary"}, "title": "Processes", "type": "array"}}, "required": ["processes"], "title": "OutputProcessSummaries", "type": "object"}, "OutputProcessSummary": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "total_items": {"default": 0, "title": "Total Items", "type": "integer"}, "input_items": {"default": 0, "title": "Input Items", "type": "integer"}, "pending_approval": {"default": 0, "title": "Pending Approval", "type": "integer"}, "assignable_members": {"default": [], "items": {"$ref": "#/components/schemas/OutputProcessAssignee"}, "title": "Assignable Members", "type": "array"}}, "required": ["id", "name"], "title": "OutputProcessSummary", "type": "object"}, "OutputOperationalItem": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "process_id": {"title": "Process Id", "type": "string"}, "process_name": {"title": "Process Name", "type": "string"}, "current_stage_id": {"title": "Current Stage Id", "type": "string"}, "current_stage_name": {"title": "Current Stage Name", "type": "string"}, "current_stage_type": {"title": "Current Stage Type", "type": "string"}, "requires_approval": {"title": "Requires Approval", "type": "boolean"}, "created_by_id": {"title": "Created By Id", "type": "string"}, "created_by_name": {"title": "Created By Name", "type": "string"}, "owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Id"}, "owner_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Name"}, "customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "customer_asset_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Asset Id"}, "customer_asset_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Asset Name"}, "customer_visible": {"default": true, "title": "Customer Visible", "type": "boolean"}, "priority": {"title": "Priority", "type": "string"}, "due_date": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Due Date"}, "is_finished": {"title": "Is Finished", "type": "boolean"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "stage_age_hours": {"default": 0, "title": "Stage Age Hours", "type": "integer"}, "stage_instructions": {"default": "", "title": "Stage Instructions", "type": "string"}, "transitions": {"default": [], "items": {"$ref": "#/components/schemas/OutputOperationalItemTransition"}, "title": "Transitions", "type": "array"}, "is_billed": {"default": false, "title": "Is Billed", "type": "boolean"}, "payment_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Payment Name"}, "proposal_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Id"}, "anchor_latitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Anchor Latitude"}, "anchor_longitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Anchor Longitude"}, "anchor_source": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Anchor Source"}, "anchor_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Anchor Name"}, "proximity_radius_m": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Proximity Radius M"}, "proximity_source": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proximity Source"}}, "required": ["id", "name", "description", "process_id", "process_name", "current_stage_id", "current_stage_name", "current_stage_type", "requires_approval", "created_by_id", "created_by_name", "priority", "is_finished", "created_at", "updated_at"], "title": "OutputOperationalItem", "type": "object"}, "OutputOperationalItemTransition": {"properties": {"action": {"title": "Action", "type": "string"}, "stage_id": {"title": "Stage Id", "type": "string"}, "stage_name": {"title": "Stage Name", "type": "string"}, "icon": {"title": "Icon", "type": "string"}, "process_name": {"default": "", "title": "Process Name", "type": "string"}, "blocked": {"default": false, "title": "Blocked", "type": "boolean"}, "blocked_reason": {"default": "", "title": "Blocked Reason", "type": "string"}}, "required": ["action", "stage_id", "stage_name", "icon"], "title": "OutputOperationalItemTransition", "type": "object"}, "OutputProcessStagesWithTasks": {"properties": {"process_id": {"title": "Process Id", "type": "string"}, "process_name": {"title": "Process Name", "type": "string"}, "stages": {"items": {"$ref": "#/components/schemas/OutputStageWithTasks"}, "title": "Stages", "type": "array"}}, "required": ["process_id", "process_name", "stages"], "title": "OutputProcessStagesWithTasks", "type": "object"}, "OutputStageWithTasks": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "sequence_no": {"title": "Sequence No", "type": "integer"}, "requires_approval": {"title": "Requires Approval", "type": "boolean"}, "is_active": {"default": true, "title": "Is Active", "type": "boolean"}, "items": {"items": {"$ref": "#/components/schemas/OutputOperationalItem"}, "title": "Items", "type": "array"}, "item_count": {"default": 0, "title": "Item Count", "type": "integer"}, "link_process_name": {"default": "", "title": "Link Process Name", "type": "string"}, "link_stage_name": {"default": "", "title": "Link Stage Name", "type": "string"}, "link_process_active": {"default": false, "title": "Link Process Active", "type": "boolean"}, "link_stage_active": {"default": false, "title": "Link Stage Active", "type": "boolean"}}, "required": ["id", "name", "stage_type", "sequence_no", "requires_approval", "items"], "title": "OutputStageWithTasks", "type": "object"}, "OutputMyTasks": {"properties": {"pending_approval": {"items": {"$ref": "#/components/schemas/OutputOperationalItem"}, "title": "Pending Approval", "type": "array"}, "pending_approval_count": {"default": 0, "title": "Pending Approval Count", "type": "integer"}, "active": {"items": {"$ref": "#/components/schemas/OutputOperationalItem"}, "title": "Active", "type": "array"}, "active_count": {"default": 0, "title": "Active Count", "type": "integer"}}, "required": ["pending_approval", "active"], "title": "OutputMyTasks", "type": "object"}, "OutputOperationalItems": {"properties": {"items": {"items": {"$ref": "#/components/schemas/OutputOperationalItem"}, "title": "Items", "type": "array"}, "total": {"default": 0, "title": "Total", "type": "integer"}}, "required": ["items"], "title": "OutputOperationalItems", "type": "object"}, "EditOperationalItem": {"properties": {"name": {"anyOf": [{"maxLength": 255, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "Name"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "customer": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer"}, "customer_asset": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Asset"}, "priority": {"anyOf": [{"enum": ["critical", "high", "normal", "low"], "type": "string"}, {"type": "null"}], "title": "Priority"}, "due_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Due Date"}, "owner": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner"}}, "title": "EditOperationalItem", "type": "object"}, "AddOperationalItem": {"properties": {"process": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Process", "type": "string"}, "name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "customer": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer"}, "customer_asset": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Asset"}, "priority": {"default": "normal", "enum": ["critical", "high", "normal", "low"], "title": "Priority", "type": "string"}, "due_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Due Date"}, "owner": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner"}}, "required": ["process", "name"], "title": "AddOperationalItem", "type": "object"}, "MoveOperationalItem": {"properties": {"target_stage": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Target Stage", "type": "string"}, "notes": {"default": "", "title": "Notes", "type": "string"}, "geo_latitude": {"anyOf": [{"maximum": 90, "minimum": -90, "type": "number"}, {"type": "null"}], "title": "Geo Latitude"}, "geo_longitude": {"anyOf": [{"maximum": 180, "minimum": -180, "type": "number"}, {"type": "null"}], "title": "Geo Longitude"}, "geo_accuracy_m": {"anyOf": [{"maximum": 10000, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Geo Accuracy M"}, "geo_overridden": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Geo Overridden"}}, "required": ["target_stage"], "title": "MoveOperationalItem", "type": "object"}, "ApproveOperationalItem": {"properties": {"target_stage": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Target Stage", "type": "string"}, "notes": {"default": "", "title": "Notes", "type": "string"}, "geo_latitude": {"anyOf": [{"maximum": 90, "minimum": -90, "type": "number"}, {"type": "null"}], "title": "Geo Latitude"}, "geo_longitude": {"anyOf": [{"maximum": 180, "minimum": -180, "type": "number"}, {"type": "null"}], "title": "Geo Longitude"}, "geo_accuracy_m": {"anyOf": [{"maximum": 10000, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Geo Accuracy M"}, "geo_overridden": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Geo Overridden"}}, "required": ["target_stage"], "title": "ApproveOperationalItem", "type": "object"}, "RejectOperationalItem": {"properties": {"reason": {"maxLength": 2000, "minLength": 2, "title": "Reason", "type": "string"}, "geo_latitude": {"anyOf": [{"maximum": 90, "minimum": -90, "type": "number"}, {"type": "null"}], "title": "Geo Latitude"}, "geo_longitude": {"anyOf": [{"maximum": 180, "minimum": -180, "type": "number"}, {"type": "null"}], "title": "Geo Longitude"}, "geo_accuracy_m": {"anyOf": [{"maximum": 10000, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Geo Accuracy M"}, "geo_overridden": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Geo Overridden"}}, "required": ["reason"], "title": "RejectOperationalItem", "type": "object"}, "ReassignOperationalItem": {"properties": {"owner": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner"}}, "title": "ReassignOperationalItem", "type": "object"}, "OutputOperationalItemHistory": {"properties": {"work_item_id": {"title": "Work Item Id", "type": "string"}, "entries": {"items": {"$ref": "#/components/schemas/OutputStageHistoryEntry"}, "title": "Entries", "type": "array"}, "total_duration_days": {"default": 0, "title": "Total Duration Days", "type": "integer"}}, "required": ["work_item_id", "entries"], "title": "OutputOperationalItemHistory", "type": "object"}, "OutputStageHistoryEntry": {"properties": {"process_name": {"title": "Process Name", "type": "string"}, "stage_name": {"title": "Stage Name", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "entered_at": {"format": "date-time", "title": "Entered At", "type": "string"}, "exited_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Exited At"}, "duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Days"}, "duration_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Hours"}, "moved_by_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Moved By Name"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Notes"}, "approval_action": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Approval Action"}, "approval_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Approval Reason"}, "is_current": {"default": false, "title": "Is Current", "type": "boolean"}}, "required": ["process_name", "stage_name", "stage_type", "entered_at"], "title": "OutputStageHistoryEntry", "type": "object"}, "OutputTimerItem": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "is_enabled": {"title": "Is Enabled", "type": "boolean"}, "schedule_type": {"title": "Schedule Type", "type": "string"}, "schedule_hour": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Schedule Hour"}, "schedule_day_of_week": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Schedule Day Of Week"}, "schedule_day_of_month": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Schedule Day Of Month"}, "last_executed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Executed At"}, "next_execution_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Next Execution At"}}, "required": ["id", "name", "description", "is_enabled", "schedule_type"], "title": "OutputTimerItem", "type": "object"}, "OutputTimers": {"properties": {"timers": {"items": {"$ref": "#/components/schemas/OutputTimerItem"}, "title": "Timers", "type": "array"}}, "required": ["timers"], "title": "OutputTimers", "type": "object"}, "AddTimer": {"properties": {"name": {"maxLength": 200, "minLength": 1, "title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "is_enabled": {"default": false, "title": "Is Enabled", "type": "boolean"}, "schedule_type": {"default": "daily", "title": "Schedule Type", "type": "string"}, "schedule_hour": {"anyOf": [{"type": "integer"}, {"type": "null"}], "default": 9, "title": "Schedule Hour"}, "schedule_day_of_week": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Schedule Day Of Week"}, "schedule_day_of_month": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Schedule Day Of Month"}}, "required": ["name"], "title": "AddTimer", "type": "object"}, "EditTimer": {"properties": {"name": {"anyOf": [{"maxLength": 200, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Name"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "is_enabled": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Enabled"}, "schedule_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Schedule Type"}, "schedule_hour": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Schedule Hour"}, "schedule_day_of_week": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Schedule Day Of Week"}, "schedule_day_of_month": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Schedule Day Of Month"}}, "title": "EditTimer", "type": "object"}, "KPIOpenTicketsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "highSeverityCount": {"default": "0", "title": "Highseveritycount", "type": "string"}, "unassignedCount": {"default": "0", "title": "Unassignedcount", "type": "string"}, "oldestHours": {"default": "0", "title": "Oldesthours", "type": "string"}}, "title": "KPIOpenTicketsSummary", "type": "object"}, "OutputKPIOpenTickets": {"properties": {"summary": {"$ref": "#/components/schemas/KPIOpenTicketsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIOpenTickets", "type": "object"}, "KPIOpenExternalTicketsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "highSeverityCount": {"default": "0", "title": "Highseveritycount", "type": "string"}, "unassignedCount": {"default": "0", "title": "Unassignedcount", "type": "string"}, "oldestHours": {"default": "0", "title": "Oldesthours", "type": "string"}, "customerCount": {"default": "0", "title": "Customercount", "type": "string"}}, "title": "KPIOpenExternalTicketsSummary", "type": "object"}, "OutputKPIOpenExternalTickets": {"properties": {"summary": {"$ref": "#/components/schemas/KPIOpenExternalTicketsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIOpenExternalTickets", "type": "object"}, "KPIQueueHealthSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "queueCount": {"default": "0", "title": "Queuecount", "type": "string"}, "totalOpenTickets": {"default": "0", "title": "Totalopentickets", "type": "string"}, "totalUnassigned": {"default": "0", "title": "Totalunassigned", "type": "string"}, "busiestQueue": {"default": "", "title": "Busiestqueue", "type": "string"}, "busiestQueueCount": {"default": "0", "title": "Busiestqueuecount", "type": "string"}}, "title": "KPIQueueHealthSummary", "type": "object"}, "OutputKPIQueueHealth": {"properties": {"summary": {"$ref": "#/components/schemas/KPIQueueHealthSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIQueueHealth", "type": "object"}, "KPIOverduePaymentsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "totalAmount": {"default": "0", "title": "Totalamount", "type": "string"}, "oldestDaysOverdue": {"default": "0", "title": "Oldestdaysoverdue", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "amountsAvailable": {"title": "Amountsavailable", "type": "boolean"}, "uncoveredCurrencies": {"title": "Uncoveredcurrencies", "type": "string"}}, "required": ["currency", "amountsAvailable", "uncoveredCurrencies"], "title": "KPIOverduePaymentsSummary", "type": "object"}, "OutputKPIOverduePayments": {"properties": {"summary": {"$ref": "#/components/schemas/KPIOverduePaymentsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIOverduePayments", "type": "object"}, "KPILeadPipelineHealthSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "overdueCount": {"default": "0", "title": "Overduecount", "type": "string"}, "staleCount": {"default": "0", "title": "Stalecount", "type": "string"}, "unclaimedCount": {"default": "0", "title": "Unclaimedcount", "type": "string"}, "untriagedCount": {"default": "0", "title": "Untriagedcount", "type": "string"}, "conversionRate30d": {"default": "0", "title": "Conversionrate30D", "type": "string"}, "maxRepLoad": {"default": "0", "title": "Maxrepload", "type": "string"}, "activeReps": {"default": "0", "title": "Activereps", "type": "string"}}, "title": "KPILeadPipelineHealthSummary", "type": "object"}, "OutputKPILeadPipelineHealth": {"properties": {"summary": {"$ref": "#/components/schemas/KPILeadPipelineHealthSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPILeadPipelineHealth", "type": "object"}, "KPIUpcomingPaymentsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "totalAmount": {"default": "0", "title": "Totalamount", "type": "string"}, "dueThisWeek": {"default": "0", "title": "Duethisweek", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "amountsAvailable": {"title": "Amountsavailable", "type": "boolean"}, "uncoveredCurrencies": {"title": "Uncoveredcurrencies", "type": "string"}}, "required": ["currency", "amountsAvailable", "uncoveredCurrencies"], "title": "KPIUpcomingPaymentsSummary", "type": "object"}, "OutputKPIUpcomingPayments": {"properties": {"summary": {"$ref": "#/components/schemas/KPIUpcomingPaymentsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIUpcomingPayments", "type": "object"}, "KPIStaleProposalsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "oldestDaysInStage": {"default": "0", "title": "Oldestdaysinstage", "type": "string"}}, "title": "KPIStaleProposalsSummary", "type": "object"}, "OutputKPIStaleProposals": {"properties": {"summary": {"$ref": "#/components/schemas/KPIStaleProposalsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIStaleProposals", "type": "object"}, "KPIExpiringProposalsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "totalValueAtRisk": {"default": "0", "title": "Totalvalueatrisk", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "amountsAvailable": {"title": "Amountsavailable", "type": "boolean"}, "uncoveredCurrencies": {"title": "Uncoveredcurrencies", "type": "string"}}, "required": ["currency", "amountsAvailable", "uncoveredCurrencies"], "title": "KPIExpiringProposalsSummary", "type": "object"}, "OutputKPIExpiringProposals": {"properties": {"summary": {"$ref": "#/components/schemas/KPIExpiringProposalsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIExpiringProposals", "type": "object"}, "KPIProposalsWithoutActivitySummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}}, "title": "KPIProposalsWithoutActivitySummary", "type": "object"}, "OutputKPIProposalsWithoutActivity": {"properties": {"summary": {"$ref": "#/components/schemas/KPIProposalsWithoutActivitySummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIProposalsWithoutActivity", "type": "object"}, "KPIWonWithoutProjectStartSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}}, "title": "KPIWonWithoutProjectStartSummary", "type": "object"}, "OutputKPIWonWithoutProjectStart": {"properties": {"summary": {"$ref": "#/components/schemas/KPIWonWithoutProjectStartSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIWonWithoutProjectStart", "type": "object"}, "KPIBlockedDeliverablesSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "blockedCount": {"default": "0", "title": "Blockedcount", "type": "string"}, "customerPendingCount": {"default": "0", "title": "Customerpendingcount", "type": "string"}, "rejectedCount": {"default": "0", "title": "Rejectedcount", "type": "string"}}, "title": "KPIBlockedDeliverablesSummary", "type": "object"}, "OutputKPIBlockedDeliverables": {"properties": {"summary": {"$ref": "#/components/schemas/KPIBlockedDeliverablesSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIBlockedDeliverables", "type": "object"}, "KPIWorkItemsDueSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "overdueCount": {"default": "0", "title": "Overduecount", "type": "string"}}, "title": "KPIWorkItemsDueSummary", "type": "object"}, "OutputKPIWorkItemsDue": {"properties": {"summary": {"$ref": "#/components/schemas/KPIWorkItemsDueSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIWorkItemsDue", "type": "object"}, "KPIProjectsAtRiskSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}}, "title": "KPIProjectsAtRiskSummary", "type": "object"}, "OutputKPIProjectsAtRisk": {"properties": {"summary": {"$ref": "#/components/schemas/KPIProjectsAtRiskSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIProjectsAtRisk", "type": "object"}, "KPIStaleOperationalItemsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "criticalCount": {"default": "0", "title": "Criticalcount", "type": "string"}, "oldestDays": {"default": "0", "title": "Oldestdays", "type": "string"}}, "title": "KPIStaleOperationalItemsSummary", "type": "object"}, "OutputKPIStaleOperationalItems": {"properties": {"summary": {"$ref": "#/components/schemas/KPIStaleOperationalItemsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIStaleOperationalItems", "type": "object"}, "KPIOverdueOperationalItemsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "criticalCount": {"default": "0", "title": "Criticalcount", "type": "string"}, "highCount": {"default": "0", "title": "Highcount", "type": "string"}, "oldestDaysOverdue": {"default": "0", "title": "Oldestdaysoverdue", "type": "string"}}, "title": "KPIOverdueOperationalItemsSummary", "type": "object"}, "OutputKPIOverdueOperationalItems": {"properties": {"summary": {"$ref": "#/components/schemas/KPIOverdueOperationalItemsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIOverdueOperationalItems", "type": "object"}, "KPIProcessBottlenecksSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "bottleneckCount": {"default": "0", "title": "Bottleneckcount", "type": "string"}, "totalItemsBlocked": {"default": "0", "title": "Totalitemsblocked", "type": "string"}, "worstStage": {"default": "", "title": "Worststage", "type": "string"}, "worstStageCount": {"default": "0", "title": "Worststagecount", "type": "string"}}, "title": "KPIProcessBottlenecksSummary", "type": "object"}, "OutputKPIProcessBottlenecks": {"properties": {"summary": {"$ref": "#/components/schemas/KPIProcessBottlenecksSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIProcessBottlenecks", "type": "object"}, "KPITeamWorkloadSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "memberCount": {"default": "0", "title": "Membercount", "type": "string"}, "overloadedCount": {"default": "0", "title": "Overloadedcount", "type": "string"}, "totalActiveItems": {"default": "0", "title": "Totalactiveitems", "type": "string"}, "avgItemsPerMember": {"default": "0", "title": "Avgitemspermember", "type": "string"}}, "title": "KPITeamWorkloadSummary", "type": "object"}, "OutputKPITeamWorkload": {"properties": {"summary": {"$ref": "#/components/schemas/KPITeamWorkloadSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPITeamWorkload", "type": "object"}, "KPIUnassignedItemsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "totalCount": {"default": "0", "title": "Totalcount", "type": "string"}, "supportCount": {"default": "0", "title": "Supportcount", "type": "string"}, "operationsCount": {"default": "0", "title": "Operationscount", "type": "string"}, "workCount": {"default": "0", "title": "Workcount", "type": "string"}}, "title": "KPIUnassignedItemsSummary", "type": "object"}, "OutputKPIUnassignedItems": {"properties": {"summary": {"$ref": "#/components/schemas/KPIUnassignedItemsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIUnassignedItems", "type": "object"}, "KPIRevenueAtRiskSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "customerCount": {"default": "0", "title": "Customercount", "type": "string"}, "totalOverdueAmount": {"default": "0", "title": "Totaloverdueamount", "type": "string"}, "totalProposalValueAtRisk": {"default": "0", "title": "Totalproposalvalueatrisk", "type": "string"}, "combinedAtRisk": {"default": "0", "title": "Combinedatrisk", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "amountsAvailable": {"title": "Amountsavailable", "type": "boolean"}, "uncoveredCurrencies": {"title": "Uncoveredcurrencies", "type": "string"}}, "required": ["currency", "amountsAvailable", "uncoveredCurrencies"], "title": "KPIRevenueAtRiskSummary", "type": "object"}, "OutputKPIRevenueAtRisk": {"properties": {"summary": {"$ref": "#/components/schemas/KPIRevenueAtRiskSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIRevenueAtRisk", "type": "object"}, "KPIExpiringApiKeysSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "expiringToday": {"default": "0", "title": "Expiringtoday", "type": "string"}}, "title": "KPIExpiringApiKeysSummary", "type": "object"}, "OutputKPIExpiringApiKeys": {"properties": {"summary": {"$ref": "#/components/schemas/KPIExpiringApiKeysSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIExpiringApiKeys", "type": "object"}, "KPIInactivePartnershipsSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "longestInactiveDays": {"default": "0", "title": "Longestinactivedays", "type": "string"}}, "title": "KPIInactivePartnershipsSummary", "type": "object"}, "OutputKPIInactivePartnerships": {"properties": {"summary": {"$ref": "#/components/schemas/KPIInactivePartnershipsSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIInactivePartnerships", "type": "object"}, "KPIExpiringWarrantiesSummary": {"properties": {"description": {"default": "", "title": "Description", "type": "string"}, "count": {"default": "0", "title": "Count", "type": "string"}, "customerCount": {"default": "0", "title": "Customercount", "type": "string"}, "expiringThisWeek": {"default": "0", "title": "Expiringthisweek", "type": "string"}}, "title": "KPIExpiringWarrantiesSummary", "type": "object"}, "OutputKPIExpiringWarranties": {"properties": {"summary": {"$ref": "#/components/schemas/KPIExpiringWarrantiesSummary"}, "items": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Items", "type": "array"}}, "required": ["summary"], "title": "OutputKPIExpiringWarranties", "type": "object"}, "CommentOutput": {"description": "Output schema for a single comment", "properties": {"id": {"title": "Id", "type": "string"}, "author_id": {"title": "Author Id", "type": "string"}, "author_name": {"title": "Author Name", "type": "string"}, "author_avatar": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Author Avatar"}, "content": {"title": "Content", "type": "string"}, "internal": {"title": "Internal", "type": "boolean"}, "created": {"format": "date-time", "title": "Created", "type": "string"}, "updated": {"format": "date-time", "title": "Updated", "type": "string"}, "edited": {"title": "Edited", "type": "boolean"}, "replies": {"default": [], "items": {"$ref": "#/components/schemas/CommentOutput"}, "title": "Replies", "type": "array"}}, "required": ["id", "author_id", "author_name", "content", "internal", "created", "updated", "edited"], "title": "CommentOutput", "type": "object"}, "OutputCommentsFeed": {"description": "Output schema for paginated comment feed", "properties": {"comments": {"items": {"$ref": "#/components/schemas/CommentOutput"}, "title": "Comments", "type": "array"}, "per_page": {"title": "Per Page", "type": "integer"}, "next_page": {"title": "Next Page", "type": "integer"}, "entity_type": {"title": "Entity Type", "type": "string"}, "entity_id": {"title": "Entity Id", "type": "string"}}, "required": ["comments", "per_page", "next_page", "entity_type", "entity_id"], "title": "OutputCommentsFeed", "type": "object"}, "AddWorkItemComment": {"description": "Input schema for adding a comment to a work item", "properties": {"work_item_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Work Item Id", "type": "string"}, "content": {"minLength": 1, "title": "Content", "type": "string"}, "parent_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent Id"}}, "required": ["work_item_id", "content"], "title": "AddWorkItemComment", "type": "object"}, "EditComment": {"description": "Input schema for editing a comment", "properties": {"content": {"minLength": 1, "title": "Content", "type": "string"}}, "required": ["content"], "title": "EditComment", "type": "object"}, "AddOperationalWorkItemComment": {"description": "Input schema for adding a comment to an operational work item", "properties": {"operational_work_item_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Operational Work Item Id", "type": "string"}, "content": {"minLength": 1, "title": "Content", "type": "string"}, "parent_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent Id"}}, "required": ["operational_work_item_id", "content"], "title": "AddOperationalWorkItemComment", "type": "object"}, "OutputAssetCategories": {"properties": {"asset_categories": {"items": {"$ref": "#/components/schemas/OutputAssetCategory"}, "title": "Asset Categories", "type": "array"}}, "required": ["asset_categories"], "title": "OutputAssetCategories", "type": "object"}, "OutputAssetCategory": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "is_active": {"title": "Is Active", "type": "boolean"}}, "required": ["id", "name", "is_active"], "title": "OutputAssetCategory", "type": "object"}, "AddAssetCategory": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "is_active": {"default": false, "title": "Is Active", "type": "boolean"}}, "required": ["name"], "title": "AddAssetCategory", "type": "object"}, "EditAssetCategory": {"properties": {"name": {"maxLength": 100, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "required": ["name"], "title": "EditAssetCategory", "type": "object"}, "OutputCustomerLocation": {"properties": {"id": {"title": "Id", "type": "string"}, "customer_id": {"title": "Customer Id", "type": "string"}, "customer_name": {"title": "Customer Name", "type": "string"}, "customer_first_letter": {"title": "Customer First Letter", "type": "string"}, "location_id": {"title": "Location Id", "type": "string"}, "location_path": {"title": "Location Path", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "is_active": {"title": "Is Active", "type": "boolean"}, "asset_count": {"default": 0, "title": "Asset Count", "type": "integer"}, "latitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Latitude"}, "longitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Longitude"}}, "required": ["id", "customer_id", "customer_name", "customer_first_letter", "location_id", "location_path", "name", "is_active"], "title": "OutputCustomerLocation", "type": "object"}, "OutputCustomerLocations": {"properties": {"customer_locations": {"items": {"$ref": "#/components/schemas/OutputCustomerLocation"}, "title": "Customer Locations", "type": "array"}}, "required": ["customer_locations"], "title": "OutputCustomerLocations", "type": "object"}, "AddCustomerLocation": {"properties": {"customer": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Customer", "type": "string"}, "location": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Location", "type": "string"}, "name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "is_active": {"default": false, "title": "Is Active", "type": "boolean"}}, "required": ["customer", "location", "name"], "title": "AddCustomerLocation", "type": "object"}, "EditCustomerLocation": {"properties": {"location": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Location", "type": "string"}, "name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "required": ["location", "name"], "title": "EditCustomerLocation", "type": "object"}, "OutputCoordinatesConflict": {"description": "409 body for GPS capture on an entity that already has a pin: the message, plus the\nstored point, so the client can show how far the pin would move before the user confirms\nthe overwrite.", "properties": {"response_id": {"title": "Response Id", "type": "string"}, "success": {"title": "Success", "type": "boolean"}, "message": {"title": "Message", "type": "string"}, "url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Url"}, "previous_latitude": {"title": "Previous Latitude", "type": "number"}, "previous_longitude": {"title": "Previous Longitude", "type": "number"}, "distance_m": {"title": "Distance M", "type": "integer"}}, "required": ["response_id", "success", "message", "previous_latitude", "previous_longitude", "distance_m"], "title": "OutputCoordinatesConflict", "type": "object"}, "SetEntityCoordinates": {"description": "Field GPS capture for a location / customer location / customer asset.\n\n`accuracy_m` is the device-reported fix accuracy and is mandatory \u2014 writes\nabove the workspace's `geo_capture_max_accuracy_m` floor are rejected, so a\n500 m fix never gets stored as truth. An existing point is never silently\noverwritten: without `confirm_overwrite` the endpoint answers 409 with the\nstored point so the client can show how far the pin would move.", "properties": {"latitude": {"maximum": 90, "minimum": -90, "title": "Latitude", "type": "number"}, "longitude": {"maximum": 180, "minimum": -180, "title": "Longitude", "type": "number"}, "accuracy_m": {"minimum": 0, "title": "Accuracy M", "type": "integer"}, "confirm_overwrite": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Confirm Overwrite"}}, "required": ["latitude", "longitude", "accuracy_m"], "title": "SetEntityCoordinates", "type": "object"}, "OutputCustomerAsset": {"properties": {"id": {"title": "Id", "type": "string"}, "customer_id": {"title": "Customer Id", "type": "string"}, "customer_name": {"title": "Customer Name", "type": "string"}, "category_id": {"title": "Category Id", "type": "string"}, "category_name": {"title": "Category Name", "type": "string"}, "customer_location_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Location Id"}, "customer_location_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Location Name"}, "project_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "project_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Name"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "product_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Name"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "serial_number_or_uri": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Serial Number Or Uri"}, "status": {"title": "Status", "type": "string"}, "status_display": {"title": "Status Display", "type": "string"}, "installation_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Installation Date"}, "warranty_expiration": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Warranty Expiration"}, "is_customer_visible": {"title": "Is Customer Visible", "type": "boolean"}, "is_parent": {"title": "Is Parent", "type": "boolean"}, "depth": {"title": "Depth", "type": "integer"}, "hierarchy_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Hierarchy Id"}, "parent_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Id"}, "parent_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Name"}, "latitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Latitude"}, "longitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Longitude"}}, "required": ["id", "customer_id", "customer_name", "category_id", "category_name", "name", "status", "status_display", "is_customer_visible", "is_parent", "depth"], "title": "OutputCustomerAsset", "type": "object"}, "OutputCustomerAssets": {"properties": {"customer_assets": {"items": {"$ref": "#/components/schemas/OutputCustomerAsset"}, "title": "Customer Assets", "type": "array"}}, "required": ["customer_assets"], "title": "OutputCustomerAssets", "type": "object"}, "AddCustomerAsset": {"properties": {"customer": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Customer", "type": "string"}, "category": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Category", "type": "string"}, "customer_location": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Location"}, "project": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Project"}, "product": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Product"}, "parent": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent"}, "name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "serial_number_or_uri": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Serial Number Or Uri"}, "status": {"default": "active", "title": "Status", "type": "string"}, "installation_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Installation Date"}, "warranty_expiration": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Warranty Expiration"}, "is_customer_visible": {"default": false, "title": "Is Customer Visible", "type": "boolean"}}, "required": ["customer", "category", "name"], "title": "AddCustomerAsset", "type": "object"}, "EditCustomerAsset": {"properties": {"category": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Category", "type": "string"}, "customer_location": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Location"}, "project": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Project"}, "product": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Product"}, "parent": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent"}, "name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "serial_number_or_uri": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Serial Number Or Uri"}, "status": {"default": "active", "title": "Status", "type": "string"}, "installation_date": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Installation Date"}, "warranty_expiration": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Warranty Expiration"}, "is_customer_visible": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Customer Visible"}}, "required": ["category", "name"], "title": "EditCustomerAsset", "type": "object"}, "CustomerAssetTicketItem": {"description": "A support request linked to a customer asset", "properties": {"id": {"title": "Id", "type": "string"}, "public_reference": {"title": "Public Reference", "type": "string"}, "title": {"title": "Title", "type": "string"}, "status_name": {"title": "Status Name", "type": "string"}, "status_lifecycle": {"title": "Status Lifecycle", "type": "string"}, "type_name": {"title": "Type Name", "type": "string"}, "severity_name": {"title": "Severity Name", "type": "string"}, "link_type": {"title": "Link Type", "type": "string"}, "is_external": {"title": "Is External", "type": "boolean"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}}, "required": ["id", "public_reference", "title", "status_name", "status_lifecycle", "type_name", "severity_name", "link_type", "is_external", "updated_at"], "title": "CustomerAssetTicketItem", "type": "object"}, "OutputCustomerAssetTickets": {"description": "Tickets linked to a customer asset (both ISR and ESR)", "properties": {"tickets": {"items": {"$ref": "#/components/schemas/CustomerAssetTicketItem"}, "title": "Tickets", "type": "array"}, "ticket_count": {"title": "Ticket Count", "type": "integer"}}, "required": ["tickets", "ticket_count"], "title": "OutputCustomerAssetTickets", "type": "object"}, "OutputTenantLocations": {"properties": {"root_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Root Id"}, "locations": {"additionalProperties": true, "title": "Locations", "type": "object"}}, "required": ["locations"], "title": "OutputTenantLocations", "type": "object"}, "AddLocation": {"properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Country"}, "parent": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent"}, "is_active": {"default": false, "title": "Is Active", "type": "boolean"}, "latitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Latitude"}, "longitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Longitude"}}, "required": ["name"], "title": "AddLocation", "type": "object"}, "EditLocation": {"properties": {"name": {"maxLength": 255, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "country": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Country"}, "parent": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "latitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Latitude"}, "longitude": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Longitude"}}, "required": ["name"], "title": "EditLocation", "type": "object"}, "NotificationItem": {"properties": {"id": {"title": "Id", "type": "string"}, "external_id": {"title": "External Id", "type": "string"}, "external_id_str": {"title": "External Id Str", "type": "string"}, "title": {"title": "Title", "type": "string"}, "message": {"title": "Message", "type": "string"}, "notification_type": {"title": "Notification Type", "type": "string"}, "priority": {"title": "Priority", "type": "string"}, "icon": {"title": "Icon", "type": "string"}, "is_read": {"title": "Is Read", "type": "boolean"}, "read_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Read At"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "tenant": {"anyOf": [{"$ref": "#/components/schemas/NotificationTenant"}, {"type": "null"}]}, "sender": {"anyOf": [{"additionalProperties": true, "type": "object"}, {"type": "null"}], "title": "Sender"}, "action_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Action Url"}}, "required": ["id", "external_id", "external_id_str", "title", "message", "notification_type", "priority", "icon", "is_read", "created_at"], "title": "NotificationItem", "type": "object"}, "NotificationTenant": {"description": "The workspace a notification belongs to.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "path": {"title": "Path", "type": "string"}}, "required": ["id", "name", "path"], "title": "NotificationTenant", "type": "object"}, "OutputUserNotifications": {"properties": {"notifications": {"items": {"$ref": "#/components/schemas/NotificationItem"}, "title": "Notifications", "type": "array"}, "page": {"title": "Page", "type": "integer"}, "per_page": {"title": "Per Page", "type": "integer"}, "total_count": {"title": "Total Count", "type": "integer"}, "has_next": {"title": "Has Next", "type": "boolean"}, "next_page": {"title": "Next Page", "type": "integer"}, "unread_count": {"title": "Unread Count", "type": "integer"}, "user_tenant_count": {"title": "User Tenant Count", "type": "integer"}}, "required": ["notifications", "page", "per_page", "total_count", "has_next", "next_page", "unread_count", "user_tenant_count"], "title": "OutputUserNotifications", "type": "object"}, "NotificationGroupOption": {"description": "One collapsible section, filtered to what this workspace has enabled.", "properties": {"group": {"title": "Group", "type": "string"}, "label": {"title": "Label", "type": "string"}, "types": {"items": {"$ref": "#/components/schemas/NotificationTypeOption"}, "title": "Types", "type": "array"}}, "required": ["group", "label", "types"], "title": "NotificationGroupOption", "type": "object"}, "NotificationTypeOption": {"description": "One row in the preferences screen.", "properties": {"type": {"title": "Type", "type": "string"}, "label": {"title": "Label", "type": "string"}, "description": {"title": "Description", "type": "string"}, "icon": {"title": "Icon", "type": "string"}, "priority": {"title": "Priority", "type": "string"}, "user_configurable": {"title": "User Configurable", "type": "boolean"}, "channels": {"additionalProperties": true, "title": "Channels", "type": "object"}}, "required": ["type", "label", "description", "icon", "priority", "user_configurable", "channels"], "title": "NotificationTypeOption", "type": "object"}, "OutputNotificationPreferences": {"description": "The preferences screen's whole state: what can be tuned, and how it currently resolves.", "properties": {"scope": {"title": "Scope", "type": "string"}, "edit_url": {"title": "Edit Url", "type": "string"}, "channels": {"items": {"type": "string"}, "title": "Channels", "type": "array"}, "editable_channels": {"items": {"type": "string"}, "title": "Editable Channels", "type": "array"}, "groups": {"items": {"$ref": "#/components/schemas/NotificationGroupOption"}, "title": "Groups", "type": "array"}}, "required": ["scope", "edit_url", "channels", "editable_channels", "groups"], "title": "OutputNotificationPreferences", "type": "object"}, "EditNotificationPreferences": {"description": "A **sparse** notification-preference edit.\n\n`preferences` maps a notification type or group key to the channels the user expressed an\nopinion about: `{\"support\": {\"web\": false}, \"support_assigned\": {\"mobile\": true}}`.\n\nOnly the keys sent are written. An absent key keeps whatever was stored, and a stored key\nthat is absent here is not cleared \u2014 matching how every other edit in this codebase\nbehaves. To go back to following the product default, send the key with an empty object\nand it is removed.", "properties": {"scope": {"default": "user", "enum": ["user", "tenant"], "title": "Scope", "type": "string"}, "preferences": {"additionalProperties": true, "default": {}, "title": "Preferences", "type": "object"}}, "title": "EditNotificationPreferences", "type": "object"}, "OutputCustomerPortalProposals": {"description": "Customer portal proposals view with individual costs", "properties": {"proposals": {"items": {"additionalProperties": true, "type": "object"}, "title": "Proposals", "type": "array"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["proposals", "currency_symbol", "org"], "title": "OutputCustomerPortalProposals", "type": "object"}, "OutputCustomerPortalProjects": {"description": "Customer portal projects view with payment aggregations", "properties": {"projects": {"items": {"additionalProperties": true, "type": "object"}, "title": "Projects", "type": "array"}, "total_accepted_amount": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Accepted Amount"}, "total_by_currency": {"default": [], "items": {"$ref": "#/components/schemas/PortalCurrencyTotal"}, "title": "Total By Currency", "type": "array"}, "next_payment_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Next Payment Date"}, "currency_symbol": {"title": "Currency Symbol", "type": "string"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["projects", "currency_symbol", "org"], "title": "OutputCustomerPortalProjects", "type": "object"}, "PortalCurrencyTotal": {"description": "One currency's share of a total the portal could not put into a single figure.", "properties": {"currency": {"title": "Currency", "type": "string"}, "symbol": {"title": "Symbol", "type": "string"}, "amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Amount", "type": "string"}}, "required": ["currency", "symbol", "amount"], "title": "PortalCurrencyTotal", "type": "object"}, "OutputCustomerPortalSupportRequests": {"description": "Customer portal support requests view", "properties": {"support_requests": {"items": {"additionalProperties": true, "type": "object"}, "title": "Support Requests", "type": "array"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["support_requests", "org"], "title": "OutputCustomerPortalSupportRequests", "type": "object"}, "OutputCustomerPortalPayments": {"description": "Customer portal payments view - unified list sorted by due date", "properties": {"payments": {"items": {"additionalProperties": true, "type": "object"}, "title": "Payments", "type": "array"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["payments", "org"], "title": "OutputCustomerPortalPayments", "type": "object"}, "OutputCustomerPortalPaymentsChart": {"description": "Customer portal payments chart data", "properties": {"series_by_currency": {"additionalProperties": true, "title": "Series By Currency", "type": "object"}, "currencies": {"items": {"type": "string"}, "title": "Currencies", "type": "array"}, "months": {"items": {"type": "string"}, "title": "Months", "type": "array"}}, "required": ["series_by_currency", "currencies", "months"], "title": "OutputCustomerPortalPaymentsChart", "type": "object"}, "OutputCustomerPortalAssets": {"description": "Customer portal assets view with customer locations and nested assets", "properties": {"customer_locations": {"items": {"additionalProperties": true, "type": "object"}, "title": "Customer Locations", "type": "array"}, "unlocated_assets": {"items": {"additionalProperties": true, "type": "object"}, "title": "Unlocated Assets", "type": "array"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["customer_locations", "unlocated_assets", "org"], "title": "OutputCustomerPortalAssets", "type": "object"}, "OutputCustomerPortalAssetDetail": {"description": "Customer portal asset detail view", "properties": {"asset": {"additionalProperties": true, "title": "Asset", "type": "object"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["asset", "org"], "title": "OutputCustomerPortalAssetDetail", "type": "object"}, "OutputCustomerPortalAssetTickets": {"description": "Customer portal asset linked tickets (ESRs with reported_asset)", "properties": {"tickets": {"items": {"additionalProperties": true, "type": "object"}, "title": "Tickets", "type": "array"}, "asset_id": {"title": "Asset Id", "type": "string"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["tickets", "asset_id", "org"], "title": "OutputCustomerPortalAssetTickets", "type": "object"}, "CustomerPortalProjectProductItem": {"description": "Individual project product item for customer portal", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "product_count": {"title": "Product Count", "type": "integer"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_asap": {"title": "Is Asap", "type": "boolean"}, "planned_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned End"}, "duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Days"}, "current_status": {"$ref": "#/components/schemas/ProductStatusDetail"}, "lifecycle_statuses": {"items": {"$ref": "#/components/schemas/ProductStatusDetail"}, "title": "Lifecycle Statuses", "type": "array"}, "is_customer_actionable": {"default": false, "title": "Is Customer Actionable", "type": "boolean"}, "accept_status": {"anyOf": [{"$ref": "#/components/schemas/PortalActionStatus"}, {"type": "null"}]}, "reject_statuses": {"default": [], "items": {"$ref": "#/components/schemas/PortalActionStatus"}, "title": "Reject Statuses", "type": "array"}}, "required": ["external_id", "name", "product_count", "is_active", "is_asap", "current_status", "lifecycle_statuses"], "title": "CustomerPortalProjectProductItem", "type": "object"}, "OutputCustomerPortalProjectProducts": {"description": "Customer portal project products view", "properties": {"products": {"items": {"$ref": "#/components/schemas/CustomerPortalProjectProductItem"}, "title": "Products", "type": "array"}, "payments": {"items": {"additionalProperties": true, "type": "object"}, "title": "Payments", "type": "array"}, "escalation": {"items": {"additionalProperties": true, "type": "object"}, "title": "Escalation", "type": "array"}, "project": {"additionalProperties": true, "title": "Project", "type": "object"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["products", "payments", "escalation", "project", "org"], "title": "OutputCustomerPortalProjectProducts", "type": "object"}, "PortalActionStatus": {"description": "Simplified status for portal action buttons", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}}, "required": ["id", "name"], "title": "PortalActionStatus", "type": "object"}, "PortalApproveProduct": {"description": "Input schema for customer approving a product in portal", "properties": {"notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Notes"}}, "title": "PortalApproveProduct", "type": "object"}, "PortalRejectProduct": {"description": "Input schema for customer rejecting a product in portal", "properties": {"reason": {"maxLength": 1000, "minLength": 1, "title": "Reason", "type": "string"}}, "required": ["reason"], "title": "PortalRejectProduct", "type": "object"}, "PortalAcceptProposal": {"description": "Input schema for customer accepting a proposal in portal", "properties": {"confirmation": {"title": "Confirmation", "type": "boolean"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Notes"}}, "required": ["confirmation"], "title": "PortalAcceptProposal", "type": "object"}, "OutputPortalQuoteCatalog": {"properties": {"items": {"items": {"$ref": "#/components/schemas/PortalQuoteCatalogItem"}, "title": "Items", "type": "array"}}, "required": ["items"], "title": "OutputPortalQuoteCatalog", "type": "object"}, "PortalQuoteCatalogItem": {"description": "An orderable catalog item as the customer sees it: no costs, no internal codes.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description_for_customer": {"default": "", "title": "Description For Customer", "type": "string"}, "product_type": {"title": "Product Type", "type": "string"}, "unit_of_measure": {"default": "", "title": "Unit Of Measure", "type": "string"}, "price": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Price"}, "currency": {"default": "", "title": "Currency", "type": "string"}, "image_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Image Url"}}, "required": ["id", "name", "product_type"], "title": "PortalQuoteCatalogItem", "type": "object"}, "OutputPortalQuoteRequests": {"properties": {"requests": {"items": {"$ref": "#/components/schemas/PortalQuoteRequest"}, "title": "Requests", "type": "array"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["requests", "org"], "title": "OutputPortalQuoteRequests", "type": "object"}, "PortalQuoteRequest": {"description": "A quote request as its customer sees it while it waits for an offer: what was asked, never\nthe supplier's prices while the offer is being prepared.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "reference": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reference"}, "description": {"default": "", "title": "Description", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "wanted_by": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Wanted By"}, "customer_reference": {"default": "", "title": "Customer Reference", "type": "string"}, "location_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Location Name"}, "asset_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Asset Name"}, "requested_by_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Requested By Name"}, "can_withdraw": {"title": "Can Withdraw", "type": "boolean"}, "lines": {"default": [], "items": {"$ref": "#/components/schemas/PortalQuoteRequestLine"}, "title": "Lines", "type": "array"}}, "required": ["id", "name", "created_at", "can_withdraw"], "title": "PortalQuoteRequest", "type": "object"}, "PortalQuoteRequestLine": {"properties": {"name": {"title": "Name", "type": "string"}, "quantity": {"title": "Quantity", "type": "integer"}, "unit_of_measure": {"default": "", "title": "Unit Of Measure", "type": "string"}, "image_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Image Url"}}, "required": ["name", "quantity"], "title": "PortalQuoteRequestLine", "type": "object"}, "PortalQuoteLine": {"description": "One catalog item the customer asks a quote for. Prices are never taken from the client.", "properties": {"catalog_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Catalog Id", "type": "string"}, "quantity": {"maximum": 10000, "minimum": 1, "title": "Quantity", "type": "integer"}}, "required": ["catalog_id", "quantity"], "title": "PortalQuoteLine", "type": "object"}, "PortalRequestQuote": {"description": "Input schema for a customer asking for a quote in the portal", "properties": {"description": {"default": "", "maxLength": 5000, "title": "Description", "type": "string"}, "lines": {"items": {"$ref": "#/components/schemas/PortalQuoteLine"}, "maxItems": 50, "minItems": 1, "title": "Lines", "type": "array"}, "customer_location": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Location"}, "customer_asset": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Asset"}, "customer_reference": {"anyOf": [{"maxLength": 64, "type": "string"}, {"type": "null"}], "title": "Customer Reference"}, "wanted_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wanted By"}}, "required": ["lines"], "title": "PortalRequestQuote", "type": "object"}, "PortalWithdrawQuoteRequest": {"description": "Input schema for a customer withdrawing a quote request in the portal", "properties": {"confirmation": {"title": "Confirmation", "type": "boolean"}}, "required": ["confirmation"], "title": "PortalWithdrawQuoteRequest", "type": "object"}, "OutputPortalOrders": {"properties": {"orders": {"items": {"$ref": "#/components/schemas/PortalOrder"}, "title": "Orders", "type": "array"}, "org": {"additionalProperties": true, "title": "Org", "type": "object"}}, "required": ["orders", "org"], "title": "OutputPortalOrders", "type": "object"}, "PortalOrder": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "reference": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reference"}, "state": {"title": "State", "type": "string"}, "state_label": {"title": "State Label", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "submitted_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Submitted At"}, "wanted_by": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Wanted By"}, "customer_reference": {"default": "", "title": "Customer Reference", "type": "string"}, "location_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Location Id"}, "location_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Location Name"}, "asset_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Asset Name"}, "description": {"default": "", "title": "Description", "type": "string"}, "requested_by_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Requested By Name"}, "rejection_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Rejection Reason"}, "currency": {"title": "Currency", "type": "string"}, "total": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total", "type": "string"}, "lines": {"default": [], "items": {"$ref": "#/components/schemas/PortalOrderLineOutput"}, "title": "Lines", "type": "array"}, "can_cancel": {"default": false, "title": "Can Cancel", "type": "boolean"}}, "required": ["id", "name", "state", "state_label", "created_at", "currency", "total"], "title": "PortalOrder", "type": "object"}, "PortalOrderLineOutput": {"description": "One line of a portal order as the customer sees it: the price agreed, never costs.", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "quantity": {"title": "Quantity", "type": "integer"}, "unit_of_measure": {"default": "", "title": "Unit Of Measure", "type": "string"}, "unit_price": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Unit Price", "type": "string"}, "total": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total", "type": "string"}, "status_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Status Name"}, "status_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Status Type"}, "image_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Image Url"}}, "required": ["id", "name", "quantity", "unit_price", "total"], "title": "PortalOrderLineOutput", "type": "object"}, "PortalPlaceOrder": {"description": "Input schema for a customer placing an order in the portal. Prices never come from the client.", "properties": {"description": {"default": "", "maxLength": 5000, "title": "Description", "type": "string"}, "lines": {"items": {"$ref": "#/components/schemas/PortalQuoteLine"}, "maxItems": 50, "minItems": 1, "title": "Lines", "type": "array"}, "customer_location": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Location"}, "customer_asset": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Customer Asset"}, "customer_reference": {"anyOf": [{"maxLength": 64, "type": "string"}, {"type": "null"}], "title": "Customer Reference"}, "wanted_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Wanted By"}}, "required": ["lines"], "title": "PortalPlaceOrder", "type": "object"}, "PortalCancelOrder": {"description": "Input schema for the customer cancelling a submitted order", "properties": {"confirmation": {"title": "Confirmation", "type": "boolean"}}, "required": ["confirmation"], "title": "PortalCancelOrder", "type": "object"}, "PortalConfirmOrderReceipt": {"description": "Input schema for the customer saying what of an order reached them", "properties": {"outcomes": {"items": {"$ref": "#/components/schemas/PortalReceiptLine"}, "maxItems": 200, "minItems": 1, "title": "Outcomes", "type": "array"}}, "required": ["outcomes"], "title": "PortalConfirmOrderReceipt", "type": "object"}, "PortalReceiptLine": {"properties": {"line_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Line Id", "type": "string"}, "outcome": {"enum": ["received", "not_received", "damaged"], "title": "Outcome", "type": "string"}}, "required": ["line_id", "outcome"], "title": "PortalReceiptLine", "type": "object"}, "AddExternalSupportRequest": {"description": "Input schema for creating external support request from customer portal", "properties": {"request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "reported_asset": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reported Asset"}}, "required": ["request_type", "request_severity", "title", "description"], "title": "AddExternalSupportRequest", "type": "object"}, "AddExternalSupportRequestForProject": {"description": "Input schema for creating external support request for a specific project from customer portal", "properties": {"request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "reported_asset": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reported Asset"}, "project_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Project Id", "type": "string"}}, "required": ["request_type", "request_severity", "title", "description", "project_id"], "title": "AddExternalSupportRequestForProject", "type": "object"}, "PortalEditExternalSupportRequest": {"description": "Portal-safe schema \u2014 excludes root_cause_asset (internal-only field).", "properties": {"title": {"maxLength": 255, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}}, "required": ["title", "description", "request_type", "request_severity"], "title": "PortalEditExternalSupportRequest", "type": "object"}, "OutputPortalShareSummary": {"properties": {"id": {"title": "Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "message": {"default": "", "title": "Message", "type": "string"}, "published_at": {"format": "date-time", "title": "Published At", "type": "string"}, "expires_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Expires At"}, "proposal_count": {"default": 0, "title": "Proposal Count", "type": "integer"}, "document_count": {"default": 0, "title": "Document Count", "type": "integer"}, "file_count": {"default": 0, "title": "File Count", "type": "integer"}}, "required": ["id", "title", "published_at"], "title": "OutputPortalShareSummary", "type": "object"}, "OutputPortalShares": {"properties": {"org_id": {"title": "Org Id", "type": "string"}, "shares": {"items": {"$ref": "#/components/schemas/OutputPortalShareSummary"}, "title": "Shares", "type": "array"}}, "required": ["org_id", "shares"], "title": "OutputPortalShares", "type": "object"}, "OutputPortalShare": {"properties": {"org_id": {"title": "Org Id", "type": "string"}, "id": {"title": "Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "message": {"default": "", "title": "Message", "type": "string"}, "published_at": {"format": "date-time", "title": "Published At", "type": "string"}, "expires_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Expires At"}, "proposals": {"items": {"$ref": "#/components/schemas/OutputPortalShareProposal"}, "title": "Proposals", "type": "array"}, "documents": {"items": {"$ref": "#/components/schemas/OutputPortalShareDocument"}, "title": "Documents", "type": "array"}, "files": {"items": {"$ref": "#/components/schemas/OutputPortalShareFile"}, "title": "Files", "type": "array"}}, "required": ["org_id", "id", "title", "published_at", "proposals", "documents", "files"], "title": "OutputPortalShare", "type": "object"}, "OutputPortalShareDocument": {"properties": {"id": {"title": "Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "full_number": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Full Number"}, "state": {"enum": ["current", "changed"], "title": "State", "type": "string"}, "updated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Updated At"}}, "required": ["id", "title", "state"], "title": "OutputPortalShareDocument", "type": "object"}, "OutputPortalShareFile": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "size": {"title": "Size", "type": "integer"}, "state": {"enum": ["current", "replaced"], "title": "State", "type": "string"}}, "required": ["id", "name", "size", "state"], "title": "OutputPortalShareFile", "type": "object"}, "OutputPortalShareProposal": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "state": {"enum": ["current", "updated", "revising", "accepted", "lost"], "title": "State", "type": "string"}, "sent_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Sent At"}, "accepted_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Accepted At"}}, "required": ["id", "name", "state"], "title": "OutputPortalShareProposal", "type": "object"}, "OutputPortalShareProposalPreview": {"properties": {"company": {"additionalProperties": true, "title": "Company", "type": "object"}, "customer": {"additionalProperties": true, "title": "Customer", "type": "object"}, "header": {"additionalProperties": true, "title": "Header", "type": "object"}, "executive_summary": {"additionalProperties": true, "title": "Executive Summary", "type": "object"}, "products": {"items": {"additionalProperties": true, "type": "object"}, "title": "Products", "type": "array"}, "has_product_pictures": {"default": false, "title": "Has Product Pictures", "type": "boolean"}, "payment_schedule": {"items": {"additionalProperties": true, "type": "object"}, "title": "Payment Schedule", "type": "array"}, "investment_summary": {"additionalProperties": true, "title": "Investment Summary", "type": "object"}, "terms_conditions": {"additionalProperties": true, "title": "Terms Conditions", "type": "object"}, "acceptance_info": {"additionalProperties": true, "title": "Acceptance Info", "type": "object"}, "generated_at": {"format": "date-time", "title": "Generated At", "type": "string"}, "tenant_path": {"title": "Tenant Path", "type": "string"}, "proposal_id": {"title": "Proposal Id", "type": "string"}, "customer_org_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Org Id"}, "share_id": {"title": "Share Id", "type": "string"}, "item_id": {"title": "Item Id", "type": "string"}, "updated_on": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Updated On"}}, "required": ["company", "customer", "header", "executive_summary", "products", "payment_schedule", "investment_summary", "terms_conditions", "acceptance_info", "generated_at", "tenant_path", "proposal_id", "share_id", "item_id"], "title": "OutputPortalShareProposalPreview", "type": "object"}, "SubmitCustomForm": {"properties": {"data": {"additionalProperties": true, "title": "Data", "type": "object"}}, "required": ["data"], "title": "SubmitCustomForm", "type": "object"}, "CreateBridge": {"description": "Input schema for creating a tenant bridge (partnership) invitation", "properties": {"partner_identifier": {"maxLength": 100, "minLength": 1, "title": "Partner Identifier", "type": "string"}, "grant_rfp_create": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Rfp Create"}, "grant_proposal_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Proposal View"}, "grant_proposal_accept": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Proposal Accept"}, "grant_quote_request": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Quote Request"}, "grant_order_place": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Order Place"}, "grant_project_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Project View"}, "grant_product_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Product View"}, "grant_product_accept": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Product Accept"}, "grant_product_reject": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Product Reject"}, "grant_payment_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Payment View"}, "grant_support_use": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Support Use"}, "grant_asset_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Asset View"}, "invitation_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Invitation Message"}}, "required": ["partner_identifier"], "title": "CreateBridge", "type": "object"}, "BridgeAdminContact": {"description": "Contact info for a tenant admin in a bridge", "properties": {"name": {"title": "Name", "type": "string"}, "email": {"title": "Email", "type": "string"}, "work_email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Email"}, "work_phone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Work Phone"}}, "required": ["name", "email"], "title": "BridgeAdminContact", "type": "object"}, "BridgeDetails": {"description": "Details of a single bridge for subtenant display", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "status": {"title": "Status", "type": "string"}, "role": {"title": "Role", "type": "string"}, "initiator_tenant": {"$ref": "#/components/schemas/BridgeTenantInfo"}, "responder_tenant": {"anyOf": [{"$ref": "#/components/schemas/BridgeTenantInfo"}, {"type": "null"}]}, "initiator_grants": {"additionalProperties": true, "title": "Initiator Grants", "type": "object"}, "responder_grants": {"additionalProperties": true, "title": "Responder Grants", "type": "object"}, "invitation_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Invitation Message"}, "created_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Created At"}, "last_timestamp_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Last Timestamp Name"}, "last_timestamp": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Timestamp"}, "suspended_by_tenant_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Suspended By Tenant Id"}, "can_unsuspend": {"default": false, "title": "Can Unsuspend", "type": "boolean"}}, "required": ["bridge_id", "status", "role", "initiator_tenant", "initiator_grants", "responder_grants"], "title": "BridgeDetails", "type": "object"}, "BridgeTenantInfo": {"description": "Tenant information in a bridge context", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "admin": {"anyOf": [{"$ref": "#/components/schemas/BridgeAdminContact"}, {"type": "null"}]}, "manager": {"anyOf": [{"$ref": "#/components/schemas/BridgeAdminContact"}, {"type": "null"}]}}, "required": ["id", "name"], "title": "BridgeTenantInfo", "type": "object"}, "OutputSubtenantBridge": {"description": "Bridge details for a subtenant", "properties": {"bridge": {"anyOf": [{"$ref": "#/components/schemas/BridgeDetails"}, {"type": "null"}]}, "subtenant_id": {"title": "Subtenant Id", "type": "string"}, "subtenant_name": {"title": "Subtenant Name", "type": "string"}, "grant_labels": {"additionalProperties": true, "title": "Grant Labels", "type": "object"}}, "required": ["subtenant_id", "subtenant_name", "grant_labels"], "title": "OutputSubtenantBridge", "type": "object"}, "BridgeHistoryEntry": {"description": "Single audit entry for a bridge", "properties": {"action": {"title": "Action", "type": "string"}, "timestamp": {"format": "date-time", "title": "Timestamp", "type": "string"}, "previous_status": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Previous Status"}, "new_status": {"title": "New Status", "type": "string"}, "performed_by_name": {"title": "Performed By Name", "type": "string"}, "performed_by_email": {"title": "Performed By Email", "type": "string"}, "performed_by_tenant_name": {"title": "Performed By Tenant Name", "type": "string"}, "grants": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Grants"}, "details": {"anyOf": [{"additionalProperties": true, "type": "object"}, {"type": "null"}], "title": "Details"}, "ip_address": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Ip Address"}}, "required": ["action", "timestamp", "previous_status", "new_status", "performed_by_name", "performed_by_email", "performed_by_tenant_name"], "title": "BridgeHistoryEntry", "type": "object"}, "BridgeHistoryOutput": {"description": "Complete audit history for a bridge", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "history": {"items": {"$ref": "#/components/schemas/BridgeHistoryEntry"}, "title": "History", "type": "array"}}, "required": ["bridge_id", "history"], "title": "BridgeHistoryOutput", "type": "object"}, "InitiatedPartnershipItem": {"description": "Single initiated partnership item", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "subtenant_id": {"title": "Subtenant Id", "type": "string"}, "subtenant_name": {"title": "Subtenant Name", "type": "string"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "expires_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Expires At"}}, "required": ["bridge_id", "subtenant_id", "subtenant_name", "partner_tenant_name"], "title": "InitiatedPartnershipItem", "type": "object"}, "OutputInitiatedPartnerships": {"description": "List of initiated partnerships", "properties": {"partnerships": {"items": {"$ref": "#/components/schemas/InitiatedPartnershipItem"}, "title": "Partnerships", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["partnerships", "total"], "title": "OutputInitiatedPartnerships", "type": "object"}, "ActivePartnerItem": {"description": "Single active partner item - partner subtenant names are never exposed for privacy", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "subtenant_id": {"title": "Subtenant Id", "type": "string"}, "subtenant_name": {"title": "Subtenant Name", "type": "string"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "partner_logo_url": {"title": "Partner Logo Url", "type": "string"}, "established_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Established At"}, "status": {"title": "Status", "type": "string"}}, "required": ["bridge_id", "subtenant_id", "subtenant_name", "partner_tenant_name", "partner_logo_url", "status"], "title": "ActivePartnerItem", "type": "object"}, "OutputActivePartners": {"description": "List of active partners", "properties": {"partners": {"items": {"$ref": "#/components/schemas/ActivePartnerItem"}, "title": "Partners", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["partners", "total"], "title": "OutputActivePartners", "type": "object"}, "OutputReceivedPartnerships": {"description": "List of received partnership invitations", "properties": {"invitations": {"items": {"$ref": "#/components/schemas/ReceivedPartnershipItem"}, "title": "Invitations", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["invitations", "total"], "title": "OutputReceivedPartnerships", "type": "object"}, "ReceivedPartnershipItem": {"description": "Single received partnership invitation item", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "inviter_tenant_name": {"title": "Inviter Tenant Name", "type": "string"}, "inviter_admin_name": {"title": "Inviter Admin Name", "type": "string"}, "inviter_admin_email": {"title": "Inviter Admin Email", "type": "string"}, "invitation_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Invitation Message"}, "invited_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Invited At"}}, "required": ["bridge_id", "inviter_tenant_name", "inviter_admin_name", "inviter_admin_email"], "title": "ReceivedPartnershipItem", "type": "object"}, "AcceptBridge": {"description": "Input schema for accepting a tenant bridge (partnership) invitation", "properties": {"proxy_subtenant_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Proxy Subtenant Id", "type": "string"}, "grant_rfp_create": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Rfp Create"}, "grant_proposal_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Proposal View"}, "grant_proposal_accept": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Proposal Accept"}, "grant_quote_request": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Quote Request"}, "grant_order_place": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Order Place"}, "grant_project_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Project View"}, "grant_product_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Product View"}, "grant_product_accept": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Product Accept"}, "grant_product_reject": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Product Reject"}, "grant_payment_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Payment View"}, "grant_support_use": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Support Use"}, "grant_asset_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": false, "title": "Grant Asset View"}}, "required": ["proxy_subtenant_id"], "title": "AcceptBridge", "type": "object"}, "EditBridgeGrants": {"description": "Input schema for editing bridge grant permissions for an active partnership", "properties": {"grant_rfp_create": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Rfp Create"}, "grant_proposal_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Proposal View"}, "grant_proposal_accept": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Proposal Accept"}, "grant_quote_request": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Quote Request"}, "grant_order_place": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Order Place"}, "grant_project_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Project View"}, "grant_product_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Product View"}, "grant_product_accept": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Product Accept"}, "grant_product_reject": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Product Reject"}, "grant_payment_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Payment View"}, "grant_support_use": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Support Use"}, "grant_asset_view": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Grant Asset View"}}, "title": "EditBridgeGrants", "type": "object"}, "SuspendBridge": {"description": "Input schema for suspending an active partnership", "properties": {"reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reason"}}, "title": "SuspendBridge", "type": "object"}, "UnsuspendBridge": {"description": "Input schema for reactivating a suspended partnership", "properties": {"reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reason"}}, "title": "UnsuspendBridge", "type": "object"}, "TerminateBridge": {"description": "Input schema for permanently terminating an active or suspended partnership", "properties": {"reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reason"}, "confirm_permanent": {"default": false, "title": "Confirm Permanent", "type": "boolean"}, "confirm_partner_path": {"title": "Confirm Partner Path", "type": "string"}}, "required": ["confirm_partner_path"], "title": "TerminateBridge", "type": "object"}, "PartnerPortalProposalItem": {"description": "Single proposal in partner portal", "properties": {"id": {"title": "Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "status": {"title": "Status", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "estimated_value": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Estimated Value"}, "currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency"}}, "required": ["id", "title", "description", "status", "created_at", "estimated_value", "currency"], "title": "PartnerPortalProposalItem", "type": "object"}, "PartnerPortalProposals": {"description": "Partner's proposals visible through bridge", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "proposals": {"items": {"$ref": "#/components/schemas/PartnerPortalProposalItem"}, "title": "Proposals", "type": "array"}, "grant_given_by_partner": {"default": true, "title": "Grant Given By Partner", "type": "boolean"}, "grant_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Grant Label"}}, "required": ["bridge_id", "partner_tenant_name", "proposals"], "title": "PartnerPortalProposals", "type": "object"}, "AcceptPartnerProposal": {"description": "Input schema for accepting a proposal from a partner through partner portal", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "proposal_id": {"title": "Proposal Id", "type": "string"}, "notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Notes"}}, "required": ["bridge_id", "proposal_id"], "title": "AcceptPartnerProposal", "type": "object"}, "PartnerApproveProduct": {"description": "Input schema for partner approving a deliverable in partner portal", "properties": {"notes": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Notes"}}, "title": "PartnerApproveProduct", "type": "object"}, "PartnerRejectProduct": {"description": "Input schema for partner rejecting a deliverable in partner portal", "properties": {"reason": {"maxLength": 1000, "minLength": 1, "title": "Reason", "type": "string"}}, "required": ["reason"], "title": "PartnerRejectProduct", "type": "object"}, "PartnerPortalProjectItem": {"description": "Single project in partner portal", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "status": {"title": "Status", "type": "string"}, "start_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Start Date"}, "target_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Target Date"}, "progress_percentage": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Progress Percentage"}}, "required": ["id", "name", "description", "status", "start_date", "target_date", "progress_percentage"], "title": "PartnerPortalProjectItem", "type": "object"}, "PartnerPortalProjects": {"description": "Partner's projects visible through bridge", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "projects": {"items": {"$ref": "#/components/schemas/PartnerPortalProjectItem"}, "title": "Projects", "type": "array"}, "grant_given_by_partner": {"default": true, "title": "Grant Given By Partner", "type": "boolean"}, "grant_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Grant Label"}}, "required": ["bridge_id", "partner_tenant_name", "projects"], "title": "PartnerPortalProjects", "type": "object"}, "PartnerPortalProjectProductItem": {"description": "Individual project product item for partner portal", "properties": {"external_id": {"title": "External Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "product_count": {"title": "Product Count", "type": "integer"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_asap": {"title": "Is Asap", "type": "boolean"}, "planned_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned Start"}, "planned_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Planned End"}, "duration_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Days"}, "current_status": {"$ref": "#/components/schemas/ProductStatusDetail"}, "lifecycle_statuses": {"items": {"$ref": "#/components/schemas/ProductStatusDetail"}, "title": "Lifecycle Statuses", "type": "array"}, "is_partner_actionable": {"default": false, "title": "Is Partner Actionable", "type": "boolean"}, "accept_status": {"anyOf": [{"$ref": "#/components/schemas/PortalActionStatus"}, {"type": "null"}]}, "reject_statuses": {"default": [], "items": {"$ref": "#/components/schemas/PortalActionStatus"}, "title": "Reject Statuses", "type": "array"}}, "required": ["external_id", "name", "product_count", "is_active", "is_asap", "current_status", "lifecycle_statuses"], "title": "PartnerPortalProjectProductItem", "type": "object"}, "PartnerPortalProjectProducts": {"description": "Partner portal project products view with tabs", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project": {"additionalProperties": true, "title": "Project", "type": "object"}, "products": {"items": {"$ref": "#/components/schemas/PartnerPortalProjectProductItem"}, "title": "Products", "type": "array"}, "payments": {"items": {"additionalProperties": true, "type": "object"}, "title": "Payments", "type": "array"}, "escalation": {"items": {"additionalProperties": true, "type": "object"}, "title": "Escalation", "type": "array"}, "grant_given_by_partner": {"default": true, "title": "Grant Given By Partner", "type": "boolean"}, "grant_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Grant Label"}}, "required": ["bridge_id", "project_id", "project", "products", "payments", "escalation"], "title": "PartnerPortalProjectProducts", "type": "object"}, "PartnerPortalPaymentItem": {"description": "Single payment in partner portal", "properties": {"id": {"title": "Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "amount": {"title": "Amount", "type": "string"}, "due_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Due Date"}, "paid": {"title": "Paid", "type": "boolean"}, "paid_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Paid Date"}, "currency_code": {"title": "Currency Code", "type": "string"}, "is_project": {"title": "Is Project", "type": "boolean"}, "is_due": {"title": "Is Due", "type": "boolean"}, "project_id": {"title": "Project Id", "type": "string"}}, "required": ["id", "project_name", "amount", "due_date", "paid", "paid_date", "currency_code", "is_project", "is_due", "project_id"], "title": "PartnerPortalPaymentItem", "type": "object"}, "PartnerPortalPayments": {"description": "Partner's payments visible through bridge", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "payments": {"items": {"$ref": "#/components/schemas/PartnerPortalPaymentItem"}, "title": "Payments", "type": "array"}, "grant_given_by_partner": {"default": true, "title": "Grant Given By Partner", "type": "boolean"}, "grant_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Grant Label"}}, "required": ["bridge_id", "partner_tenant_name", "payments"], "title": "PartnerPortalPayments", "type": "object"}, "PartnerPortalAssetItem": {"description": "Single asset in partner portal", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "category_name": {"title": "Category Name", "type": "string"}, "status": {"title": "Status", "type": "string"}, "status_display": {"title": "Status Display", "type": "string"}, "installation_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Installation Date"}, "warranty_expiration": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Warranty Expiration"}}, "required": ["id", "name", "category_name", "status", "status_display"], "title": "PartnerPortalAssetItem", "type": "object"}, "PartnerPortalAssets": {"description": "Partner's assets visible through bridge, grouped by location", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "locations": {"items": {"$ref": "#/components/schemas/PartnerPortalLocationWithAssets"}, "title": "Locations", "type": "array"}, "unlocated_assets": {"items": {"$ref": "#/components/schemas/PartnerPortalAssetItem"}, "title": "Unlocated Assets", "type": "array"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "grant_given_by_partner": {"default": true, "title": "Grant Given By Partner", "type": "boolean"}, "grant_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Grant Label"}}, "required": ["bridge_id", "locations", "unlocated_assets", "partner_tenant_name"], "title": "PartnerPortalAssets", "type": "object"}, "PartnerPortalLocationWithAssets": {"description": "Location with its assets for partner portal", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "assets": {"items": {"$ref": "#/components/schemas/PartnerPortalAssetItem"}, "title": "Assets", "type": "array"}}, "required": ["id", "name", "assets"], "title": "PartnerPortalLocationWithAssets", "type": "object"}, "PartnerPortalSupportRequestItem": {"description": "Single support request in partner portal", "properties": {"id": {"title": "Id", "type": "string"}, "public_reference": {"title": "Public Reference", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "status": {"title": "Status", "type": "string"}, "priority": {"title": "Priority", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "requester_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Requester Name"}}, "required": ["id", "public_reference", "title", "description", "status", "priority", "created_at", "updated_at", "requester_name"], "title": "PartnerPortalSupportRequestItem", "type": "object"}, "PartnerPortalSupportRequests": {"description": "Support requests between partners", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "support_requests": {"items": {"$ref": "#/components/schemas/PartnerPortalSupportRequestItem"}, "title": "Support Requests", "type": "array"}, "grant_given_by_partner": {"default": true, "title": "Grant Given By Partner", "type": "boolean"}, "grant_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Grant Label"}}, "required": ["bridge_id", "partner_tenant_name", "support_requests"], "title": "PartnerPortalSupportRequests", "type": "object"}, "AllPartnersProposalItem": {"description": "Proposal item with partner context for aggregated view", "properties": {"id": {"title": "Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "status": {"title": "Status", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "estimated_value": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Estimated Value"}, "currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "proxy_subtenant_id": {"title": "Proxy Subtenant Id", "type": "string"}, "bridge_id": {"title": "Bridge Id", "type": "string"}}, "required": ["id", "title", "description", "status", "created_at", "estimated_value", "currency", "partner_tenant_name", "proxy_subtenant_id", "bridge_id"], "title": "AllPartnersProposalItem", "type": "object"}, "AllPartnersProposals": {"description": "Aggregated proposals from all active partnerships", "properties": {"proposals": {"items": {"$ref": "#/components/schemas/AllPartnersProposalItem"}, "title": "Proposals", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["proposals", "total"], "title": "AllPartnersProposals", "type": "object"}, "AllPartnersProjectItem": {"description": "Project item with partner context for aggregated view", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "status": {"title": "Status", "type": "string"}, "start_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Start Date"}, "target_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Target Date"}, "progress_percentage": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Progress Percentage"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "proxy_subtenant_id": {"title": "Proxy Subtenant Id", "type": "string"}, "bridge_id": {"title": "Bridge Id", "type": "string"}}, "required": ["id", "name", "description", "status", "start_date", "target_date", "progress_percentage", "partner_tenant_name", "proxy_subtenant_id", "bridge_id"], "title": "AllPartnersProjectItem", "type": "object"}, "AllPartnersProjects": {"description": "Aggregated projects from all active partnerships", "properties": {"projects": {"items": {"$ref": "#/components/schemas/AllPartnersProjectItem"}, "title": "Projects", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["projects", "total"], "title": "AllPartnersProjects", "type": "object"}, "AllPartnersPaymentItem": {"description": "Payment item with partner context for aggregated view", "properties": {"id": {"title": "Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "amount": {"title": "Amount", "type": "string"}, "due_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Due Date"}, "paid": {"title": "Paid", "type": "boolean"}, "paid_date": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Paid Date"}, "currency_code": {"title": "Currency Code", "type": "string"}, "is_project": {"title": "Is Project", "type": "boolean"}, "is_due": {"title": "Is Due", "type": "boolean"}, "project_id": {"title": "Project Id", "type": "string"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "proxy_subtenant_id": {"title": "Proxy Subtenant Id", "type": "string"}}, "required": ["id", "project_name", "amount", "due_date", "paid", "paid_date", "currency_code", "is_project", "is_due", "project_id", "partner_tenant_name", "proxy_subtenant_id"], "title": "AllPartnersPaymentItem", "type": "object"}, "AllPartnersPayments": {"description": "Aggregated payments from all active partnerships", "properties": {"payments": {"items": {"$ref": "#/components/schemas/AllPartnersPaymentItem"}, "title": "Payments", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["payments", "total"], "title": "AllPartnersPayments", "type": "object"}, "AllPartnersSupportRequestItem": {"description": "Support request item with partner context for aggregated view", "properties": {"id": {"title": "Id", "type": "string"}, "public_reference": {"title": "Public Reference", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "status": {"title": "Status", "type": "string"}, "priority": {"title": "Priority", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "requester_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Requester Name"}, "partner_tenant_name": {"title": "Partner Tenant Name", "type": "string"}, "bridge_id": {"title": "Bridge Id", "type": "string"}, "proxy_subtenant_id": {"title": "Proxy Subtenant Id", "type": "string"}}, "required": ["id", "public_reference", "title", "description", "status", "priority", "created_at", "updated_at", "requester_name", "partner_tenant_name", "bridge_id", "proxy_subtenant_id"], "title": "AllPartnersSupportRequestItem", "type": "object"}, "AllPartnersSupportRequests": {"description": "Aggregated support requests from all active partnerships", "properties": {"support_requests": {"items": {"$ref": "#/components/schemas/AllPartnersSupportRequestItem"}, "title": "Support Requests", "type": "array"}, "total": {"title": "Total", "type": "integer"}}, "required": ["support_requests", "total"], "title": "AllPartnersSupportRequests", "type": "object"}, "PartnerPortalSupportRequestTypes": {"description": "Available request types/severities for partner portal", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "types": {"items": {"$ref": "#/components/schemas/SupportRequestTypeItem"}, "title": "Types", "type": "array"}, "severities": {"items": {"$ref": "#/components/schemas/SupportRequestSeverityItem"}, "title": "Severities", "type": "array"}}, "required": ["bridge_id", "types", "severities"], "title": "PartnerPortalSupportRequestTypes", "type": "object"}, "SupportRequestSeverityItem": {"description": "Single support request severity", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "severity_score": {"title": "Severity Score", "type": "integer"}}, "required": ["id", "name", "description", "severity_score"], "title": "SupportRequestSeverityItem", "type": "object"}, "SupportRequestTypeItem": {"description": "Single support request type", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}}, "required": ["id", "name", "description"], "title": "SupportRequestTypeItem", "type": "object"}, "AddPartnerSupportRequest": {"description": "Input schema for partner creating support request in supplier tenant", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "request_type": {"title": "Request Type", "type": "string"}, "request_severity": {"title": "Request Severity", "type": "string"}, "title": {"maxLength": 50, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "project_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "product_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Id"}, "reported_asset": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reported Asset"}}, "required": ["bridge_id", "request_type", "request_severity", "title", "description"], "title": "AddPartnerSupportRequest", "type": "object"}, "PartnerPortalSupportRequestDetail": {"description": "Detailed view of single support request - matches customer portal structure", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "id": {"title": "Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"title": "Description", "type": "string"}, "public_reference": {"title": "Public Reference", "type": "string"}, "status_lifecycle": {"title": "Status Lifecycle", "type": "string"}, "request_status": {"title": "Request Status", "type": "string"}, "request_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Request Type"}, "request_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Request Severity"}, "assignee_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Assignee Name"}, "project_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Name"}, "product_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Name"}, "resolution_display": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Resolution Display"}, "closure_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Closure Reason"}, "author_info": {"title": "Author Info", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "solution_pending": {"title": "Solution Pending", "type": "boolean"}, "can_reopen": {"title": "Can Reopen", "type": "boolean"}, "is_requester": {"default": false, "title": "Is Requester", "type": "boolean"}}, "required": ["bridge_id", "id", "title", "description", "public_reference", "status_lifecycle", "request_status", "request_type", "request_severity", "assignee_name", "project_name", "product_name", "resolution_display", "closure_reason", "author_info", "created_at", "updated_at", "solution_pending", "can_reopen"], "title": "PartnerPortalSupportRequestDetail", "type": "object"}, "PartnerPortalFileNames": {"description": "Partner portal files with bridge_id for file operations", "properties": {"node_type": {"enum": ["org", "proposal", "resource", "internal_support_request", "external_support_request", "project_work_item", "operational_work_item", "rfp"], "title": "Node Type", "type": "string"}, "node_id": {"title": "Node Id", "type": "string"}, "successfully_retrieved_files": {"title": "Successfully Retrieved Files", "type": "boolean"}, "successfully_retrieved_trash": {"title": "Successfully Retrieved Trash", "type": "boolean"}, "files": {"items": {"$ref": "#/components/schemas/OutputFileName"}, "title": "Files", "type": "array"}, "trash_can": {"items": {"$ref": "#/components/schemas/OutputFileNameTrash"}, "title": "Trash Can", "type": "array"}, "bridge_id": {"title": "Bridge Id", "type": "string"}}, "required": ["node_type", "node_id", "successfully_retrieved_files", "successfully_retrieved_trash", "files", "trash_can", "bridge_id"], "title": "PartnerPortalFileNames", "type": "object"}, "AddPartnerSupportRequestComment": {"description": "Input schema for partner adding comment to existing support request", "properties": {"support_request_id": {"title": "Support Request Id", "type": "string"}, "bridge_id": {"title": "Bridge Id", "type": "string"}, "content": {"minLength": 1, "title": "Content", "type": "string"}, "parent_id": {"anyOf": [{"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, {"type": "null"}], "title": "Parent Id"}}, "required": ["support_request_id", "bridge_id", "content"], "title": "AddPartnerSupportRequestComment", "type": "object"}, "EditPartnerSupportRequest": {"description": "Input schema for partner editing support request", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "title": {"maxLength": 255, "minLength": 1, "title": "Title", "type": "string"}, "description": {"minLength": 1, "title": "Description", "type": "string"}, "request_type": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Type", "type": "string"}, "request_severity": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Request Severity", "type": "string"}}, "required": ["bridge_id", "title", "description", "request_type", "request_severity"], "title": "EditPartnerSupportRequest", "type": "object"}, "EditPartnerSupportRequestComment": {"description": "Input schema for partner editing comment (IDs in URL path)", "properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "content": {"maxLength": 5000, "minLength": 1, "title": "Content", "type": "string"}}, "required": ["bridge_id", "content"], "title": "EditPartnerSupportRequestComment", "type": "object"}, "AddRFP": {"description": "Input schema for creating a new RFP", "properties": {"name": {"maxLength": 100, "minLength": 1, "title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "category": {"title": "Category", "type": "string"}, "currency": {"maxLength": 3, "minLength": 1, "title": "Currency", "type": "string"}, "budget_min": {"anyOf": [{"minimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Min"}, "budget_max": {"anyOf": [{"minimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Max"}, "submission_deadline": {"title": "Submission Deadline", "type": "string"}}, "required": ["name", "category", "currency", "submission_deadline"], "title": "AddRFP", "type": "object"}, "OutputRFPItem": {"description": "Single RFP in tenant's list", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "category": {"title": "Category", "type": "string"}, "category_display": {"title": "Category Display", "type": "string"}, "currency_code": {"title": "Currency Code", "type": "string"}, "budget_min": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Min"}, "budget_max": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Max"}, "submission_deadline": {"format": "date", "title": "Submission Deadline", "type": "string"}, "status": {"title": "Status", "type": "string"}, "status_display": {"title": "Status Display", "type": "string"}}, "required": ["id", "name", "internal_code", "category", "category_display", "currency_code", "budget_min", "budget_max", "submission_deadline", "status", "status_display"], "title": "OutputRFPItem", "type": "object"}, "OutputTenantRFPs": {"description": "List of RFPs created by the tenant", "properties": {"rfps": {"items": {"$ref": "#/components/schemas/OutputRFPItem"}, "title": "Rfps", "type": "array"}}, "required": ["rfps"], "title": "OutputTenantRFPs", "type": "object"}, "OutputOurRFPItem": {"description": "Single RFP in tenant's full list (all statuses)", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "category": {"title": "Category", "type": "string"}, "category_display": {"title": "Category Display", "type": "string"}, "currency_code": {"title": "Currency Code", "type": "string"}, "budget_min": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Min"}, "budget_max": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Max"}, "submission_deadline": {"format": "date", "title": "Submission Deadline", "type": "string"}, "status": {"title": "Status", "type": "string"}, "status_display": {"title": "Status Display", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "publication_count": {"title": "Publication Count", "type": "integer"}}, "required": ["id", "name", "internal_code", "category", "category_display", "currency_code", "budget_min", "budget_max", "submission_deadline", "status", "status_display", "is_active", "publication_count"], "title": "OutputOurRFPItem", "type": "object"}, "OutputOurRFPs": {"description": "All RFPs created by the tenant (all statuses)", "properties": {"rfps": {"items": {"$ref": "#/components/schemas/OutputOurRFPItem"}, "title": "Rfps", "type": "array"}}, "required": ["rfps"], "title": "OutputOurRFPs", "type": "object"}, "OutputIncomingRFPItem": {"description": "Single RFP received from a partner (solicitation)", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "category_display": {"title": "Category Display", "type": "string"}, "currency_code": {"title": "Currency Code", "type": "string"}, "budget_min": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Min"}, "budget_max": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Max"}, "submission_deadline": {"format": "date", "title": "Submission Deadline", "type": "string"}, "status_display": {"title": "Status Display", "type": "string"}, "issuer_name": {"title": "Issuer Name", "type": "string"}, "bridge_id": {"title": "Bridge Id", "type": "string"}, "publication_state": {"title": "Publication State", "type": "string"}}, "required": ["id", "name", "category_display", "currency_code", "budget_min", "budget_max", "submission_deadline", "status_display", "issuer_name", "bridge_id", "publication_state"], "title": "OutputIncomingRFPItem", "type": "object"}, "OutputIncomingRFPs": {"description": "RFPs published to this tenant by partners (solicitations)", "properties": {"rfps": {"items": {"$ref": "#/components/schemas/OutputIncomingRFPItem"}, "title": "Rfps", "type": "array"}, "won_rfps": {"default": [], "items": {"$ref": "#/components/schemas/OutputIncomingRFPItem"}, "title": "Won Rfps", "type": "array"}}, "required": ["rfps"], "title": "OutputIncomingRFPs", "type": "object"}, "OutputRFPDetail": {"description": "Full details of an RFP created by this tenant", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "description": {"title": "Description", "type": "string"}, "category": {"title": "Category", "type": "string"}, "category_display": {"title": "Category Display", "type": "string"}, "currency_code": {"title": "Currency Code", "type": "string"}, "budget_min": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Min"}, "budget_max": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Max"}, "submission_deadline": {"format": "date", "title": "Submission Deadline", "type": "string"}, "status": {"title": "Status", "type": "string"}, "status_display": {"title": "Status Display", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "created_by_name": {"title": "Created By Name", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "published_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Published At"}, "closed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Closed At"}, "cancelled_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Cancelled At"}, "awarded_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Awarded At"}, "publications": {"items": {"$ref": "#/components/schemas/OutputRFPPublicationItem"}, "title": "Publications", "type": "array"}, "has_shortlisted": {"title": "Has Shortlisted", "type": "boolean"}}, "required": ["id", "name", "internal_code", "description", "category", "category_display", "currency_code", "budget_min", "budget_max", "submission_deadline", "status", "status_display", "is_active", "created_by_name", "created_at", "publications", "has_shortlisted"], "title": "OutputRFPDetail", "type": "object"}, "OutputRFPPublicationItem": {"description": "Single publication entry for RFP detail view", "properties": {"id": {"title": "Id", "type": "string"}, "partner_name": {"title": "Partner Name", "type": "string"}, "bridge_id": {"title": "Bridge Id", "type": "string"}, "state": {"title": "State", "type": "string"}, "state_display": {"title": "State Display", "type": "string"}, "published_at": {"format": "date-time", "title": "Published At", "type": "string"}, "viewed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Viewed At"}, "intent_to_respond": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Intent To Respond"}, "intent_declared_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Intent Declared At"}, "is_shortlisted": {"title": "Is Shortlisted", "type": "boolean"}, "is_winner": {"title": "Is Winner", "type": "boolean"}, "has_proposal": {"default": false, "title": "Has Proposal", "type": "boolean"}, "proposal_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Proposal Id"}, "has_proposal_grant": {"default": false, "title": "Has Proposal Grant", "type": "boolean"}}, "required": ["id", "partner_name", "bridge_id", "state", "state_display", "published_at", "intent_to_respond", "is_shortlisted", "is_winner"], "title": "OutputRFPPublicationItem", "type": "object"}, "OutputSolicitationDetail": {"description": "Full details of an RFP received from a partner (solicitation)", "properties": {"id": {"title": "Id", "type": "string"}, "rfp_id": {"title": "Rfp Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "category_display": {"title": "Category Display", "type": "string"}, "currency_code": {"title": "Currency Code", "type": "string"}, "budget_min": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Min"}, "budget_max": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Max"}, "submission_deadline": {"format": "date", "title": "Submission Deadline", "type": "string"}, "status": {"title": "Status", "type": "string"}, "status_display": {"title": "Status Display", "type": "string"}, "issuer_name": {"title": "Issuer Name", "type": "string"}, "bridge_id": {"title": "Bridge Id", "type": "string"}, "publication_state": {"title": "Publication State", "type": "string"}, "publication_state_display": {"title": "Publication State Display", "type": "string"}, "published_at": {"format": "date-time", "title": "Published At", "type": "string"}, "viewed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Viewed At"}, "intent_to_respond": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Intent To Respond"}, "intent_declared_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Intent Declared At"}, "intent_note": {"title": "Intent Note", "type": "string"}, "is_winner": {"default": false, "title": "Is Winner", "type": "boolean"}}, "required": ["id", "rfp_id", "name", "description", "category_display", "currency_code", "budget_min", "budget_max", "submission_deadline", "status", "status_display", "issuer_name", "bridge_id", "publication_state", "publication_state_display", "published_at", "intent_to_respond", "intent_note"], "title": "OutputSolicitationDetail", "type": "object"}, "PublishRFPToPartners": {"description": "Input schema for publishing an RFP to selected partners", "properties": {"rfp_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Rfp Id", "type": "string"}, "partners": {"items": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "type": "string"}, "title": "Partners", "type": "array"}}, "required": ["rfp_id", "partners"], "title": "PublishRFPToPartners", "type": "object"}, "EditRFP": {"description": "Input schema for editing an RFP.\n\nIn DRAFT status, all fields can be edited.\nIn PUBLISHED/CLOSED status, only description and submission_deadline can be changed.", "properties": {"name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Name"}, "internal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Internal Code"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Category"}, "currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency"}, "budget_min": {"anyOf": [{"minimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Min"}, "budget_max": {"anyOf": [{"minimum": 0.0, "type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Budget Max"}, "submission_deadline": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Submission Deadline"}}, "title": "EditRFP", "type": "object"}, "CompareOption": {"description": "Single comparison option for dropdown rendering", "properties": {"value": {"title": "Value", "type": "string"}, "label": {"title": "Label", "type": "string"}}, "required": ["value", "label"], "title": "CompareOption", "type": "object"}, "HorizonOption": {"description": "Single horizon option for dropdown rendering", "properties": {"value": {"title": "Value", "type": "string"}, "label": {"title": "Label", "type": "string"}}, "required": ["value", "label"], "title": "HorizonOption", "type": "object"}, "OverviewKPIs": {"description": "Executive KPIs for Overview - one metric per business domain.\n\nCovers all 4 business domains with real database-backed metrics:\n- Customers: Acquisition and growth\n- Sales: Won revenue (closed deals)\n- Delivery: Active project workload\n- Support: Ticket backlog health\n\nDesigned for quick business health assessment with trend indicators.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "currency": {"title": "Currency", "type": "string"}, "new_customers": {"title": "New Customers", "type": "integer"}, "new_customers_previous": {"title": "New Customers Previous", "type": "integer"}, "new_customers_change_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "title": "New Customers Change Percent"}, "new_customers_trend": {"title": "New Customers Trend", "type": "string"}, "total_active_customers": {"title": "Total Active Customers", "type": "integer"}, "won_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Won Revenue"}, "won_revenue_previous": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Won Revenue Previous"}, "won_revenue_change_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "title": "Won Revenue Change Percent"}, "won_revenue_trend": {"title": "Won Revenue Trend", "type": "string"}, "won_deals_count": {"title": "Won Deals Count", "type": "integer"}, "active_projects": {"title": "Active Projects", "type": "integer"}, "projects_started": {"title": "Projects Started", "type": "integer"}, "projects_started_previous": {"title": "Projects Started Previous", "type": "integer"}, "projects_started_change_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "title": "Projects Started Change Percent"}, "projects_trend": {"title": "Projects Trend", "type": "string"}, "open_tickets": {"title": "Open Tickets", "type": "integer"}, "tickets_opened": {"title": "Tickets Opened", "type": "integer"}, "tickets_closed": {"title": "Tickets Closed", "type": "integer"}, "tickets_net_change": {"title": "Tickets Net Change", "type": "integer"}, "tickets_previous_net": {"title": "Tickets Previous Net", "type": "integer"}, "tickets_trend": {"title": "Tickets Trend", "type": "string"}, "tickets_status": {"title": "Tickets Status", "type": "string"}}, "required": ["currency", "new_customers", "new_customers_previous", "new_customers_trend", "total_active_customers", "won_revenue_trend", "won_deals_count", "active_projects", "projects_started", "projects_started_previous", "projects_trend", "open_tickets", "tickets_opened", "tickets_closed", "tickets_net_change", "tickets_previous_net", "tickets_trend", "tickets_status"], "title": "OverviewKPIs", "type": "object"}, "AnalyticsAlertItem": {"description": "Single alert item", "properties": {"id": {"title": "Id", "type": "string"}, "severity": {"title": "Severity", "type": "string"}, "category": {"title": "Category", "type": "string"}, "title": {"title": "Title", "type": "string"}, "description": {"title": "Description", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "action_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Action Url"}, "amount": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Amount"}, "currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency"}, "days_info": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Days Info"}}, "required": ["id", "severity", "category", "title", "description", "created_at"], "title": "AnalyticsAlertItem", "type": "object"}, "AnalyticsAlerts": {"description": "Business alerts for Command Center", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "alerts": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsAlertItem"}, "title": "Alerts", "type": "array"}, "critical_count": {"title": "Critical Count", "type": "integer"}, "warning_count": {"title": "Warning Count", "type": "integer"}, "info_count": {"title": "Info Count", "type": "integer"}}, "required": ["critical_count", "warning_count", "info_count"], "title": "AnalyticsAlerts", "type": "object"}, "AnalyticsTrendItem": {"description": "Single trend indicator.\n\n`unit` is the dimension the figure is in -- a currency code, `%`, `deals`, `tickets` -- so a\nconsumer formats it without guessing. The template used to decide by matching words in the\ntranslated `name`.", "properties": {"name": {"title": "Name", "type": "string"}, "unit": {"default": "", "title": "Unit", "type": "string"}, "current_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Current Value"}, "previous_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Previous Value"}, "change_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "title": "Change Percent"}, "trend": {"title": "Trend", "type": "string"}}, "required": ["name", "trend"], "title": "AnalyticsTrendItem", "type": "object"}, "AnalyticsTrends": {"description": "Business trends for Command Center", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "trends": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTrendItem"}, "title": "Trends", "type": "array"}}, "title": "AnalyticsTrends", "type": "object"}, "AnalyticsCashflowOverview": {"description": "General Cash Flow overview - all income vs all payments", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "total_income_scheduled": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Income Scheduled"}, "total_income_realized": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Income Realized"}, "total_payments_scheduled": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Payments Scheduled"}, "total_payments_realized": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Payments Realized"}, "net_position_scheduled": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Net Position Scheduled"}, "net_position_realized": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Net Position Realized"}, "income_collected_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Income Collected Percent"}, "payments_made_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Payments Made Percent"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "currency": {"title": "Currency", "type": "string"}}, "required": ["currency"], "title": "AnalyticsCashflowOverview", "type": "object"}, "AnalyticsCashflowBucket": {"description": "Cash flow for a single time bucket (quarter, month, or week)", "properties": {"label": {"title": "Label", "type": "string"}, "sublabel": {"title": "Sublabel", "type": "string"}, "income_projected": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Income Projected"}, "income_realized": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Income Realized"}, "payments_projected": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Payments Projected"}, "payments_realized": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Payments Realized"}, "net_projected": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Net Projected"}, "net_realized": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Net Realized"}}, "required": ["label", "sublabel"], "title": "AnalyticsCashflowBucket", "type": "object"}, "AnalyticsCashflowProjections": {"description": "Cash flow projections by fiscal period with adaptive granularity", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "fiscal_year": {"title": "Fiscal Year", "type": "integer"}, "granularity": {"default": "quarter", "title": "Granularity", "type": "string"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "buckets": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsCashflowBucket"}, "title": "Buckets", "type": "array"}, "quarters": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsCashflowBucket"}, "title": "Quarters", "type": "array"}, "currency": {"title": "Currency", "type": "string"}}, "required": ["fiscal_year", "currency"], "title": "AnalyticsCashflowProjections", "type": "object"}, "AnalyticsCashflowBreakdown": {"description": "Cash flow breakdown by source", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "income_by_source": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsCashflowSourceItem"}, "title": "Income By Source", "type": "array"}, "payments_by_source": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsCashflowSourceItem"}, "title": "Payments By Source", "type": "array"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "currency": {"title": "Currency", "type": "string"}}, "required": ["currency"], "title": "AnalyticsCashflowBreakdown", "type": "object"}, "AnalyticsCashflowSourceItem": {"description": "Cash flow by source", "properties": {"source": {"title": "Source", "type": "string"}, "amount_scheduled": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Amount Scheduled"}, "amount_realized": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Amount Realized"}}, "required": ["source"], "title": "AnalyticsCashflowSourceItem", "type": "object"}, "SalesKPIs": {"description": "Sales KPIs - Pipeline health and deal flow status.\n\nShows 4 key metrics:\n1. Win Rate - effectiveness of converting deals\n2. Average Deal Size - quality indicator\n3. Sales Velocity - compound metric of pipeline health\n4. Revenue Won - bottom-line result for the period\n\nPlus supporting pipeline and deal breakdown data.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "win_rate_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Win Rate Percent"}, "win_rate_benchmark": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Win Rate Benchmark", "type": "string"}, "win_rate_status": {"title": "Win Rate Status", "type": "string"}, "deals_won_period": {"title": "Deals Won Period", "type": "integer"}, "deals_lost_period": {"title": "Deals Lost Period", "type": "integer"}, "avg_deal_size": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Avg Deal Size"}, "avg_deal_size_status": {"title": "Avg Deal Size Status", "type": "string"}, "largest_deal_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Largest Deal Value"}, "smallest_deal_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Smallest Deal Value"}, "sales_velocity": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Sales Velocity"}, "sales_velocity_status": {"title": "Sales Velocity Status", "type": "string"}, "avg_sales_cycle_days": {"title": "Avg Sales Cycle Days", "type": "integer"}, "revenue_won_period": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Revenue Won Period"}, "revenue_won_previous": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Revenue Won Previous"}, "revenue_won_trend": {"title": "Revenue Won Trend", "type": "string"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "pipeline_total_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pipeline Total Value"}, "pipeline_weighted_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pipeline Weighted Value"}, "pipeline_status": {"title": "Pipeline Status", "type": "string"}, "deals_in_discovery": {"title": "Deals In Discovery", "type": "integer"}, "deals_in_proposal": {"title": "Deals In Proposal", "type": "integer"}, "deals_in_negotiation": {"title": "Deals In Negotiation", "type": "integer"}, "deals_closing_soon": {"title": "Deals Closing Soon", "type": "integer"}, "total_active_deals": {"title": "Total Active Deals", "type": "integer"}, "new_deals_this_period": {"title": "New Deals This Period", "type": "integer"}, "stalled_deals": {"title": "Stalled Deals", "type": "integer"}, "deals_status": {"title": "Deals Status", "type": "string"}, "currency": {"title": "Currency", "type": "string"}}, "required": ["win_rate_benchmark", "win_rate_status", "deals_won_period", "deals_lost_period", "avg_deal_size_status", "sales_velocity_status", "avg_sales_cycle_days", "revenue_won_trend", "pipeline_status", "deals_in_discovery", "deals_in_proposal", "deals_in_negotiation", "deals_closing_soon", "total_active_deals", "new_deals_this_period", "stalled_deals", "deals_status", "currency"], "title": "SalesKPIs", "type": "object"}, "AnalyticsSalesFunnel": {"description": "Summary info for a single funnel (used in tabs)", "properties": {"funnel_id": {"title": "Funnel Id", "type": "string"}, "funnel_name": {"title": "Funnel Name", "type": "string"}, "deal_count": {"title": "Deal Count", "type": "integer"}, "total_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Value"}}, "required": ["funnel_id", "funnel_name", "deal_count"], "title": "AnalyticsSalesFunnel", "type": "object"}, "AnalyticsSalesPipeline": {"description": "Sales pipeline analysis for a specific funnel.\n\nWeighted Value Explanation:\nWeighted pipeline value adjusts the raw deal values by the probability\nof winning at each stage. For example, a $100K deal in Negotiation (75%\nprobability) contributes $75K to weighted value, while the same deal in\nLead stage (10% probability) would only contribute $10K. This gives a\nmore realistic view of expected revenue from the pipeline.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "funnel_id": {"title": "Funnel Id", "type": "string"}, "funnel_name": {"title": "Funnel Name", "type": "string"}, "available_funnels": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsSalesFunnel"}, "title": "Available Funnels", "type": "array"}, "total_pipeline_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Pipeline Value"}, "weighted_pipeline_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Weighted Pipeline Value"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "coverage_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Coverage Percent"}, "total_deals": {"title": "Total Deals", "type": "integer"}, "stages": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsSalesPipelineStage"}, "title": "Stages", "type": "array"}, "weighted_value_explanation": {"default": "", "title": "Weighted Value Explanation", "type": "string"}, "currency": {"title": "Currency", "type": "string"}}, "required": ["funnel_id", "funnel_name", "total_deals", "currency"], "title": "AnalyticsSalesPipeline", "type": "object"}, "AnalyticsSalesPipelineStage": {"description": "Single pipeline stage with deal distribution and velocity metrics", "properties": {"stage_id": {"title": "Stage Id", "type": "string"}, "stage_name": {"title": "Stage Name", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "stage_order": {"title": "Stage Order", "type": "integer"}, "probability_percent": {"title": "Probability Percent", "type": "integer"}, "deal_count": {"title": "Deal Count", "type": "integer"}, "total_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Value"}, "weighted_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Weighted Value"}, "avg_days_in_stage": {"title": "Avg Days In Stage", "type": "integer"}}, "required": ["stage_id", "stage_name", "stage_type", "stage_order", "probability_percent", "deal_count", "avg_days_in_stage"], "title": "AnalyticsSalesPipelineStage", "type": "object"}, "AnalyticsPerformanceEntry": {"description": "Single performer entry (salesperson, customer, or product)", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Avatar Url"}, "deals_won": {"title": "Deals Won", "type": "integer"}, "deals_lost": {"title": "Deals Lost", "type": "integer"}, "total_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Revenue"}, "win_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Win Rate"}, "avg_deal_size": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Avg Deal Size"}, "prev_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Revenue"}, "revenue_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Revenue Change Pct"}, "currency": {"title": "Currency", "type": "string"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "attainment": {"default": [], "items": {"$ref": "#/components/schemas/TargetAttainmentEntry"}, "title": "Attainment", "type": "array"}}, "required": ["id", "name", "deals_won", "deals_lost", "currency"], "title": "AnalyticsPerformanceEntry", "type": "object"}, "AnalyticsSalesPerformance": {"description": "Sales performance across three dimensions: salespeople, customers, products", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "total_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Revenue"}, "deals_won": {"title": "Deals Won", "type": "integer"}, "deals_lost": {"title": "Deals Lost", "type": "integer"}, "win_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Win Rate"}, "avg_deal_size": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Avg Deal Size"}, "prev_total_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Total Revenue"}, "revenue_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Revenue Change Pct"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "salespeople": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsPerformanceEntry"}, "title": "Salespeople", "type": "array"}, "customers": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsPerformanceEntry"}, "title": "Customers", "type": "array"}, "products": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsPerformanceEntry"}, "title": "Products", "type": "array"}, "currency": {"title": "Currency", "type": "string"}}, "required": ["deals_won", "deals_lost", "currency"], "title": "AnalyticsSalesPerformance", "type": "object"}, "TargetAttainmentEntry": {"description": "Attainment of one sales target metric for a report period.\n\n`target` is the whole period's number (the month for MTD, the quarter for QTD, the year for YTD),\nsplit from the rows in `sources` by calendar month. Attainment and bands are measured against it.\n`expected_to_date` is the share due by the end of the window -- the \"expected by today\" marker.\n\n`attainment_pct` and `band_name` are None whenever the comparison cannot honestly be made, with\n`unavailable` carrying the reason, and while the period has not started (`not_started`). A missing\ntarget produces no entry at all rather than a zero: a target nobody set is not one somebody missed.", "properties": {"metric": {"title": "Metric", "type": "string"}, "metric_label": {"title": "Metric Label", "type": "string"}, "target": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Target", "type": "string"}, "currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency"}, "actual": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Actual"}, "attainment_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Attainment Pct"}, "band_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Band Name"}, "scheme_name": {"title": "Scheme Name", "type": "string"}, "period_start": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Period Start"}, "period_end": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Period End"}, "expected_to_date": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Expected To Date"}, "expected_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Expected Pct"}, "pace_gap": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pace Gap"}, "elapsed": {"default": "0", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Elapsed", "type": "string"}, "period_length": {"default": "0", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Period Length", "type": "string"}, "length_unit": {"default": "days", "title": "Length Unit", "type": "string"}, "not_started": {"default": false, "title": "Not Started", "type": "boolean"}, "coverage_partial": {"default": false, "title": "Coverage Partial", "type": "boolean"}, "covered_from": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Covered From"}, "covered_until": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Covered Until"}, "prorated": {"default": false, "title": "Prorated", "type": "boolean"}, "target_count": {"default": 1, "title": "Target Count", "type": "integer"}, "sources": {"default": [], "items": {"$ref": "#/components/schemas/TargetSource"}, "title": "Sources", "type": "array"}, "unavailable": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Unavailable"}, "bands": {"default": [], "items": {"$ref": "#/components/schemas/TargetBandRung"}, "title": "Bands", "type": "array"}, "segments": {"default": [], "items": {"$ref": "#/components/schemas/TargetBandSegment"}, "title": "Segments", "type": "array"}, "scale_max_pct": {"default": "100", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Scale Max Pct", "type": "string"}}, "required": ["metric", "metric_label", "target", "scheme_name"], "title": "TargetAttainmentEntry", "type": "object"}, "TargetBandRung": {"description": "One rung of the scheme's band ladder, so a surface can draw the whole ladder rather than\nonly the rung reached.", "properties": {"name": {"title": "Name", "type": "string"}, "threshold_percent": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Threshold Percent", "type": "string"}}, "required": ["name", "threshold_percent"], "title": "TargetBandRung", "type": "object"}, "TargetBandSegment": {"description": "One stretch of the attainment bar, already measured as a share of the track.\n\nThe arithmetic is done here rather than in the template: widths depend on where the ladder ends\nand on whether the person went past it, and a template cannot divide.", "properties": {"name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Name"}, "width_pct": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Width Pct", "type": "string"}, "achieved": {"title": "Achieved", "type": "boolean"}}, "required": ["width_pct", "achieved"], "title": "TargetBandSegment", "type": "object"}, "TargetSource": {"description": "One target row behind an attainment entry, as the admin typed it, with its monthly rate.", "properties": {"amount": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Amount", "type": "string"}, "currency": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Currency"}, "period_start": {"format": "date", "title": "Period Start", "type": "string"}, "period_end": {"format": "date", "title": "Period End", "type": "string"}, "per_month": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Per Month", "type": "string"}}, "required": ["amount", "period_start", "period_end", "per_month"], "title": "TargetSource", "type": "object"}, "AnalyticsSalespersonSales": {"description": "One salesperson's won deals for a period, with the same KPIs the dashboard shows.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "member_id": {"title": "Member Id", "type": "string"}, "member_name": {"title": "Member Name", "type": "string"}, "avatar_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Avatar Url"}, "is_self": {"default": false, "title": "Is Self", "type": "boolean"}, "total_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Revenue"}, "deals_won": {"title": "Deals Won", "type": "integer"}, "deals_lost": {"title": "Deals Lost", "type": "integer"}, "win_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Win Rate"}, "avg_deal_size": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Avg Deal Size"}, "prev_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Revenue"}, "revenue_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Revenue Change Pct"}, "rows": {"default": [], "items": {"$ref": "#/components/schemas/SalespersonSaleRow"}, "title": "Rows", "type": "array"}, "currency": {"title": "Currency", "type": "string"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "series": {"default": [], "items": {"$ref": "#/components/schemas/SalesSeriesPoint"}, "title": "Series", "type": "array"}, "series_previous": {"default": [], "items": {"$ref": "#/components/schemas/SalesSeriesPoint"}, "title": "Series Previous", "type": "array"}, "window_start": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Window Start"}, "window_end": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Window End"}, "previous_start": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Previous Start"}, "previous_end": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Previous End"}, "attainment": {"default": [], "items": {"$ref": "#/components/schemas/TargetAttainmentEntry"}, "title": "Attainment", "type": "array"}}, "required": ["member_id", "member_name", "deals_won", "deals_lost", "currency"], "title": "AnalyticsSalespersonSales", "type": "object"}, "SalesSeriesPoint": {"description": "One day of a salesperson's running total, in the workspace currency.", "properties": {"date": {"format": "date", "title": "Date", "type": "string"}, "value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Value", "type": "string"}}, "required": ["date", "value"], "title": "SalesSeriesPoint", "type": "object"}, "SalespersonSaleRow": {"description": "One won deal on the salesperson page.", "properties": {"approved_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Approved At"}, "value": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Value", "type": "string"}, "currency": {"title": "Currency", "type": "string"}, "project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Id"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "lead_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lead Id"}, "lead_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lead Name"}, "lead_count": {"default": 0, "title": "Lead Count", "type": "integer"}}, "required": ["value", "currency", "project_id", "project_name"], "title": "SalespersonSaleRow", "type": "object"}, "AnalyticsSalesConversion": {"description": "Sales conversion funnel analysis with overall summary and per-funnel detail.\n\nShows:\n- Overall conversion metrics across all funnels\n- Per-funnel tabs with stage-by-stage conversion rates\n- Detailed stage metrics including drop-off analysis", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "overall_conversion_rate": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Overall Conversion Rate", "type": "string"}, "total_deals_created": {"title": "Total Deals Created", "type": "integer"}, "total_deals_won": {"title": "Total Deals Won", "type": "integer"}, "total_deals_lost": {"title": "Total Deals Lost", "type": "integer"}, "total_deals_open": {"title": "Total Deals Open", "type": "integer"}, "avg_sales_cycle_days": {"title": "Avg Sales Cycle Days", "type": "integer"}, "win_rate": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Win Rate", "type": "string"}, "prev_conversion_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Conversion Rate"}, "prev_win_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Win Rate"}, "conversion_rate_change": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Conversion Rate Change"}, "win_rate_change": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Win Rate Change"}, "funnel_id": {"title": "Funnel Id", "type": "string"}, "funnel_name": {"title": "Funnel Name", "type": "string"}, "available_funnels": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsSalesConversionFunnelSummary"}, "title": "Available Funnels", "type": "array"}, "stages": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsSalesConversionStage"}, "title": "Stages", "type": "array"}, "bottleneck_stage": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Bottleneck Stage"}, "fastest_stage": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Fastest Stage"}}, "required": ["overall_conversion_rate", "total_deals_created", "total_deals_won", "total_deals_lost", "total_deals_open", "avg_sales_cycle_days", "win_rate", "funnel_id", "funnel_name"], "title": "AnalyticsSalesConversion", "type": "object"}, "AnalyticsSalesConversionFunnelSummary": {"description": "Summary info for a single funnel (used in tabs)", "properties": {"funnel_id": {"title": "Funnel Id", "type": "string"}, "funnel_name": {"title": "Funnel Name", "type": "string"}, "deals_created": {"title": "Deals Created", "type": "integer"}, "deals_won": {"title": "Deals Won", "type": "integer"}, "deals_lost": {"title": "Deals Lost", "type": "integer"}, "funnel_conversion_rate": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Funnel Conversion Rate", "type": "string"}}, "required": ["funnel_id", "funnel_name", "deals_created", "deals_won", "deals_lost", "funnel_conversion_rate"], "title": "AnalyticsSalesConversionFunnelSummary", "type": "object"}, "AnalyticsSalesConversionStage": {"description": "Single conversion stage with transition metrics", "properties": {"stage_id": {"title": "Stage Id", "type": "string"}, "stage_name": {"title": "Stage Name", "type": "string"}, "stage_type": {"title": "Stage Type", "type": "string"}, "stage_order": {"title": "Stage Order", "type": "integer"}, "deals_entered": {"title": "Deals Entered", "type": "integer"}, "deals_advanced": {"title": "Deals Advanced", "type": "integer"}, "deals_lost": {"title": "Deals Lost", "type": "integer"}, "deals_stalled": {"title": "Deals Stalled", "type": "integer"}, "conversion_rate": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Conversion Rate", "type": "string"}, "avg_days_in_stage": {"title": "Avg Days In Stage", "type": "integer"}, "prev_conversion_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Conversion Rate"}, "conversion_rate_change": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Conversion Rate Change"}}, "required": ["stage_id", "stage_name", "stage_type", "stage_order", "deals_entered", "deals_advanced", "deals_lost", "deals_stalled", "conversion_rate", "avg_days_in_stage"], "title": "AnalyticsSalesConversionStage", "type": "object"}, "AnalyticsSalesForecast": {"description": "Sales forecast - aggregated across all funnels.\n\nProjects future revenue based on current pipeline deals weighted by\nstage probability. Deals are grouped by expected close date into\ntime buckets (monthly for short horizons, quarterly for long).\n\nNote: Comparisons (YoY, PoP) are not applicable to forecasts since\nforecasts are projections, not historical data.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "total_pipeline_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Pipeline Value"}, "total_weighted_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Weighted Value"}, "total_best_case": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Best Case"}, "total_worst_case": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Worst Case"}, "total_deals": {"title": "Total Deals", "type": "integer"}, "avg_deal_size": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Avg Deal Size"}, "avg_sales_cycle_days": {"title": "Avg Sales Cycle Days", "type": "integer"}, "granularity": {"title": "Granularity", "type": "string"}, "buckets": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsSalesForecastBucket"}, "title": "Buckets", "type": "array"}, "deals_without_close_date": {"default": 0, "title": "Deals Without Close Date", "type": "integer"}, "value_without_close_date": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "default": "0.00", "title": "Value Without Close Date"}, "currency": {"title": "Currency", "type": "string"}, "weighted_value_explanation": {"default": "", "title": "Weighted Value Explanation", "type": "string"}}, "required": ["total_deals", "avg_sales_cycle_days", "granularity", "currency"], "title": "AnalyticsSalesForecast", "type": "object"}, "AnalyticsSalesForecastBucket": {"description": "Single time bucket (month or quarter) in sales forecast", "properties": {"label": {"title": "Label", "type": "string"}, "sublabel": {"title": "Sublabel", "type": "string"}, "deal_count": {"title": "Deal Count", "type": "integer"}, "pipeline_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Pipeline Value"}, "weighted_value": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Weighted Value"}, "best_case": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Best Case"}, "worst_case": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Worst Case"}}, "required": ["label", "sublabel", "deal_count"], "title": "AnalyticsSalesForecastBucket", "type": "object"}, "FinancialKPIs": {"description": "Financial KPIs - Revenue, margins, and receivables health.\n\nShows: Revenue with growth rate, Margin health, AR aging summary, DSO status.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "total_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Revenue"}, "revenue_growth_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Revenue Growth Percent"}, "revenue_status": {"title": "Revenue Status", "type": "string"}, "recurring_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Recurring Revenue"}, "one_time_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "One Time Revenue"}, "gross_margin_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Gross Margin Percent"}, "gross_margin_target": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Gross Margin Target", "type": "string"}, "gross_margin_status": {"title": "Gross Margin Status", "type": "string"}, "margin_trend_direction": {"title": "Margin Trend Direction", "type": "string"}, "outstanding_ar": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Outstanding Ar"}, "ar_current": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar Current"}, "ar_overdue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar Overdue"}, "ar_overdue_30_plus": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar Overdue 30 Plus"}, "ar_status": {"title": "Ar Status", "type": "string"}, "ar_nothing_outstanding": {"default": false, "title": "Ar Nothing Outstanding", "type": "boolean"}, "ar_at_risk_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar At Risk Percent"}, "dso_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Dso Days"}, "dso_target": {"title": "Dso Target", "type": "integer"}, "dso_status": {"title": "Dso Status", "type": "string"}, "dso_industry_benchmark": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Dso Industry Benchmark"}, "currency": {"title": "Currency", "type": "string"}}, "required": ["revenue_status", "gross_margin_target", "gross_margin_status", "margin_trend_direction", "ar_status", "dso_target", "dso_status", "currency"], "title": "FinancialKPIs", "type": "object"}, "AnalyticsFinancialRevenue": {"description": "Revenue analysis", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "total_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Revenue"}, "recurring_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Recurring Revenue"}, "one_time_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "One Time Revenue"}, "recurring_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Recurring Percent"}, "one_time_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "One Time Percent"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "revenue_by_category": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsRevenueCategoryItem"}, "title": "Revenue By Category", "type": "array"}, "monthly_trend": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsRevenueMonthItem"}, "title": "Monthly Trend", "type": "array"}, "currency": {"title": "Currency", "type": "string"}, "prev_total_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Total Revenue"}, "prev_recurring_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Recurring Revenue"}, "prev_one_time_revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev One Time Revenue"}, "total_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Total Change Pct"}, "recurring_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Recurring Change Pct"}, "one_time_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "One Time Change Pct"}}, "required": ["currency"], "title": "AnalyticsFinancialRevenue", "type": "object"}, "AnalyticsRevenueCategoryItem": {"description": "Revenue by category.\n\nOptional for the same reason the headline totals are: a category whose payments sit in a currency\nwith no rate has no amount. The old loop skipped those rows, so this field was never null -- it was\nsilently too small instead, which is the worse of the two answers.", "properties": {"category": {"title": "Category", "type": "string"}, "amount": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Amount"}, "percent_of_total": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Percent Of Total"}}, "required": ["category"], "title": "AnalyticsRevenueCategoryItem", "type": "object"}, "AnalyticsRevenueMonthItem": {"description": "Revenue for a single month. Null where that month holds a payment with no rate.", "properties": {"month": {"title": "Month", "type": "string"}, "recurring": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Recurring"}, "one_time": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "One Time"}, "total": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total"}}, "required": ["month"], "title": "AnalyticsRevenueMonthItem", "type": "object"}, "AnalyticsCostCategoryItem": {"description": "Costs by category. Null where that category holds an expense with no rate.", "properties": {"category": {"title": "Category", "type": "string"}, "amount": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Amount"}, "percent_of_total": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Percent Of Total"}}, "required": ["category"], "title": "AnalyticsCostCategoryItem", "type": "object"}, "AnalyticsCostMonthItem": {"description": "Costs for a single month. Null where that month holds an expense with no rate.", "properties": {"month": {"title": "Month", "type": "string"}, "direct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Direct"}, "overhead": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Overhead"}, "total": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total"}}, "required": ["month"], "title": "AnalyticsCostMonthItem", "type": "object"}, "AnalyticsFinancialCosts": {"description": "Cost analysis", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "total_costs": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total Costs"}, "direct_costs": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Direct Costs"}, "overhead_costs": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Overhead Costs"}, "direct_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Direct Percent"}, "overhead_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Overhead Percent"}, "costs_by_category": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsCostCategoryItem"}, "title": "Costs By Category", "type": "array"}, "monthly_trend": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsCostMonthItem"}, "title": "Monthly Trend", "type": "array"}, "currency": {"title": "Currency", "type": "string"}, "prev_total_costs": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Total Costs"}, "prev_direct_costs": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Direct Costs"}, "prev_overhead_costs": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Overhead Costs"}, "total_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Total Change Pct"}, "direct_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Direct Change Pct"}, "overhead_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Overhead Change Pct"}}, "required": ["currency"], "title": "AnalyticsFinancialCosts", "type": "object"}, "AnalyticsFinancialMargins": {"description": "Margin analytics", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "gross_margin_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Gross Margin Percent"}, "contribution_margin_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Contribution Margin Percent"}, "no_costs_recorded": {"default": false, "title": "No Costs Recorded", "type": "boolean"}, "margins_by_product": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsMarginItem"}, "title": "Margins By Product", "type": "array"}, "margins_by_customer": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsMarginItem"}, "title": "Margins By Customer", "type": "array"}, "currency": {"title": "Currency", "type": "string"}, "prev_gross_margin_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Gross Margin Pct"}, "prev_contribution_margin_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Prev Contribution Margin Pct"}, "gross_margin_change_pp": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Gross Margin Change Pp"}, "contribution_margin_change_pp": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Contribution Margin Change Pp"}}, "required": ["currency"], "title": "AnalyticsFinancialMargins", "type": "object"}, "AnalyticsMarginItem": {"description": "Margin for a single entity. Null wherever that entity holds a row with no rate.", "properties": {"name": {"title": "Name", "type": "string"}, "revenue": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Revenue"}, "costs": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Costs"}, "gross_margin": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Gross Margin"}, "gross_margin_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Gross Margin Percent"}}, "required": ["name"], "title": "AnalyticsMarginItem", "type": "object"}, "AnalyticsARCustomerItem": {"description": "AR aging by customer. Null wherever that band holds a receivable with no rate.", "properties": {"name": {"title": "Name", "type": "string"}, "current": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Current"}, "days_30": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Days 30"}, "days_60": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Days 60"}, "days_61_90": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Days 61 90"}, "days_90_plus": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Days 90 Plus"}, "total": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Total"}}, "required": ["name"], "title": "AnalyticsARCustomerItem", "type": "object"}, "AnalyticsFinancialAging": {"description": "AR/AP aging analysis.\n\nEvery band is Optional. Only the two totals were, so the three overdue bands reported the rows\nthat converted while the total above them was refused -- the bands added up to more than the\nfigure they belonged to, and the wider one was the one marked unavailable.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "uncovered_currencies": {"default": [], "items": {"type": "string"}, "title": "Uncovered Currencies", "type": "array"}, "ar_total": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar Total"}, "ar_current": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar Current"}, "ar_30_days": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar 30 Days"}, "ar_60_days": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar 60 Days"}, "ar_61_90_days": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar 61 90 Days"}, "ar_90_plus_days": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar 90 Plus Days"}, "ar_risk_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ar Risk Percent"}, "ar_by_customer": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsARCustomerItem"}, "title": "Ar By Customer", "type": "array"}, "ap_total": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ap Total"}, "ap_current": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ap Current"}, "ap_30_days": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ap 30 Days"}, "ap_60_days": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ap 60 Days"}, "ap_61_90_days": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ap 61 90 Days"}, "ap_90_plus_days": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ap 90 Plus Days"}, "ap_overdue_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Ap Overdue Percent"}, "currency": {"title": "Currency", "type": "string"}}, "required": ["currency"], "title": "AnalyticsFinancialAging", "type": "object"}, "DeliveryKPIs": {"description": "Delivery KPIs - Backlog overview showing remaining work.\n\nShows: Total remaining hours, pending items, overdue items,\nhours logged, due this week/month.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "total_remaining_hours": {"title": "Total Remaining Hours", "type": "number"}, "total_pending_items": {"title": "Total Pending Items", "type": "integer"}, "remaining_items": {"default": 0, "title": "Remaining Items", "type": "integer"}, "overdue_items": {"title": "Overdue Items", "type": "integer"}, "overdue_hours": {"title": "Overdue Hours", "type": "number"}, "backlog_status": {"title": "Backlog Status", "type": "string"}, "minutes_logged_period": {"title": "Minutes Logged Period", "type": "integer"}, "minutes_logged_total": {"title": "Minutes Logged Total", "type": "integer"}, "progress_status": {"title": "Progress Status", "type": "string"}, "due_this_week": {"title": "Due This Week", "type": "integer"}, "due_this_week_hours": {"title": "Due This Week Hours", "type": "number"}, "due_this_month": {"title": "Due This Month", "type": "integer"}, "due_this_month_hours": {"title": "Due This Month Hours", "type": "number"}, "due_soon_status": {"title": "Due Soon Status", "type": "string"}, "items_status": {"title": "Items Status", "type": "string"}, "most_urgent_item": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Most Urgent Item"}}, "required": ["total_remaining_hours", "total_pending_items", "overdue_items", "overdue_hours", "backlog_status", "minutes_logged_period", "minutes_logged_total", "progress_status", "due_this_week", "due_this_week_hours", "due_this_month", "due_this_month_hours", "due_soon_status", "items_status"], "title": "DeliveryKPIs", "type": "object"}, "AnalyticsDeliveryProjects": {"description": "Remaining work by project", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "total_projects": {"title": "Total Projects", "type": "integer"}, "total_remaining_hours": {"title": "Total Remaining Hours", "type": "number"}, "most_remaining_project": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Most Remaining Project"}, "projects": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsProjectRemainingItem"}, "title": "Projects", "type": "array"}}, "required": ["total_projects", "total_remaining_hours"], "title": "AnalyticsDeliveryProjects", "type": "object"}, "AnalyticsProjectRemainingItem": {"description": "Remaining work for a single project", "properties": {"project_id": {"title": "Project Id", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "remaining_hours": {"title": "Remaining Hours", "type": "number"}, "pending_items": {"title": "Pending Items", "type": "integer"}, "overdue_items": {"title": "Overdue Items", "type": "integer"}, "progress_pct": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Progress Pct", "type": "string"}}, "required": ["project_id", "project_name", "remaining_hours", "pending_items", "overdue_items", "progress_pct"], "title": "AnalyticsProjectRemainingItem", "type": "object"}, "AnalyticsDeliveryMilestones": {"description": "Team workload distribution (renamed from milestones)", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "total_team_members": {"title": "Total Team Members", "type": "integer"}, "total_remaining_hours": {"title": "Total Remaining Hours", "type": "number"}, "avg_utilization": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Avg Utilization", "type": "string"}, "horizon_days": {"title": "Horizon Days", "type": "integer"}, "team_members": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTeamWorkloadItem"}, "title": "Team Members", "type": "array"}, "workload_chart_data": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsWorkloadChartItem"}, "title": "Workload Chart Data", "type": "array"}}, "required": ["total_team_members", "total_remaining_hours", "avg_utilization", "horizon_days"], "title": "AnalyticsDeliveryMilestones", "type": "object"}, "AnalyticsTeamWorkloadItem": {"description": "Workload for a single team member.\n\n``remaining_hours`` is the open work-item backlog and has no time horizon. ``booked_hours`` and\n``available_hours`` are both summed over the utilization horizon, and utilization is the ratio\nof the two \u2014 ``available_hours`` is None when the member has no weekly schedule on file, which\nmakes utilization unknowable rather than zero.", "properties": {"member_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Id"}, "member_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Member Name"}, "remaining_hours": {"title": "Remaining Hours", "type": "number"}, "pending_items": {"title": "Pending Items", "type": "integer"}, "overdue_items": {"title": "Overdue Items", "type": "integer"}, "booked_hours": {"default": 0, "title": "Booked Hours", "type": "number"}, "available_hours": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Available Hours"}, "utilization_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Utilization Pct"}, "status": {"title": "Status", "type": "string"}}, "required": ["remaining_hours", "pending_items", "overdue_items", "status"], "title": "AnalyticsTeamWorkloadItem", "type": "object"}, "AnalyticsWorkloadChartItem": {"description": "Chart data for workload visualization", "properties": {"name": {"title": "Name", "type": "string"}, "booked": {"title": "Booked", "type": "number"}, "available": {"title": "Available", "type": "number"}}, "required": ["name", "booked", "available"], "title": "AnalyticsWorkloadChartItem", "type": "object"}, "AnalyticsDeliveryHealth": {"description": "Delivery timeline - work items grouped by due date", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "overdue_count": {"title": "Overdue Count", "type": "integer"}, "this_week_count": {"title": "This Week Count", "type": "integer"}, "this_month_count": {"title": "This Month Count", "type": "integer"}, "later_count": {"title": "Later Count", "type": "integer"}, "no_date_count": {"title": "No Date Count", "type": "integer"}, "total_pending": {"title": "Total Pending", "type": "integer"}, "overdue_hours": {"title": "Overdue Hours", "type": "number"}, "this_week_hours": {"title": "This Week Hours", "type": "number"}, "this_month_hours": {"title": "This Month Hours", "type": "number"}, "later_hours": {"title": "Later Hours", "type": "number"}, "no_date_hours": {"title": "No Date Hours", "type": "number"}, "overdue_items": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTimelineItem"}, "title": "Overdue Items", "type": "array"}, "this_week_items": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTimelineItem"}, "title": "This Week Items", "type": "array"}, "this_month_items": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTimelineItem"}, "title": "This Month Items", "type": "array"}, "timeline_chart_data": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTimelineChartItem"}, "title": "Timeline Chart Data", "type": "array"}, "urgency_status": {"title": "Urgency Status", "type": "string"}, "week_end": {"title": "Week End", "type": "string"}, "month_end": {"title": "Month End", "type": "string"}}, "required": ["overdue_count", "this_week_count", "this_month_count", "later_count", "no_date_count", "total_pending", "overdue_hours", "this_week_hours", "this_month_hours", "later_hours", "no_date_hours", "urgency_status", "week_end", "month_end"], "title": "AnalyticsDeliveryHealth", "type": "object"}, "AnalyticsTimelineChartItem": {"description": "Chart data for timeline visualization", "properties": {"label": {"title": "Label", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "hours": {"title": "Hours", "type": "number"}}, "required": ["label", "count", "hours"], "title": "AnalyticsTimelineChartItem", "type": "object"}, "AnalyticsTimelineItem": {"description": "Work item in timeline view", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "project_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Name"}, "project_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "owner_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Name"}, "owner_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Id"}, "due_date": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Due Date"}, "remaining_hours": {"title": "Remaining Hours", "type": "number"}, "percent_complete": {"title": "Percent Complete", "type": "integer"}, "type_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Type Name"}, "days_overdue": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Days Overdue"}}, "required": ["id", "name", "remaining_hours", "percent_complete"], "title": "AnalyticsTimelineItem", "type": "object"}, "ResourcesKPIs": {"description": "Resources KPIs - equipment utilization and capacity health over the next `horizon_days`.\n\n\"Resource\" is the Resource model: equipment, vehicles, rooms. Every figure comes from\nResourceBooking measured against each resource's weekly Availability.\n\nBillable/non-billable percentages and the skills-gap counts are GONE: the product models\nneither (WorkLog has no billable flag, and there is no Skill model), so they could only ever\nhave been invented \u2014 which is exactly what the old implementation did.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "horizon_days": {"title": "Horizon Days", "type": "integer"}, "utilization_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Utilization Percent"}, "utilization_target_low": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Utilization Target Low", "type": "string"}, "utilization_target_high": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Utilization Target High", "type": "string"}, "utilization_target_band": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Utilization Target Band", "type": "string"}, "utilization_status": {"title": "Utilization Status", "type": "string"}, "total_capacity_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Capacity Hours", "type": "string"}, "allocated_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Allocated Hours", "type": "string"}, "available_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Available Hours", "type": "string"}, "capacity_status": {"title": "Capacity Status", "type": "string"}, "weeks_of_capacity": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Weeks Of Capacity"}, "total_resources": {"title": "Total Resources", "type": "integer"}, "resources_overallocated": {"title": "Resources Overallocated", "type": "integer"}, "resources_underallocated": {"title": "Resources Underallocated", "type": "integer"}, "resources_optimal": {"title": "Resources Optimal", "type": "integer"}, "resources_scheduled": {"title": "Resources Scheduled", "type": "integer"}, "resources_unscheduled": {"title": "Resources Unscheduled", "type": "integer"}, "fleet_status": {"title": "Fleet Status", "type": "string"}}, "required": ["horizon_days", "utilization_target_low", "utilization_target_high", "utilization_target_band", "utilization_status", "total_capacity_hours", "allocated_hours", "available_hours", "capacity_status", "total_resources", "resources_overallocated", "resources_underallocated", "resources_optimal", "resources_scheduled", "resources_unscheduled", "fleet_status"], "title": "ResourcesKPIs", "type": "object"}, "AnalyticsResourcesUtilization": {"description": "Equipment utilization over the selected period, with an optional previous-period compare.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "overall_utilization_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Overall Utilization Rate"}, "total_booked_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Booked Hours", "type": "string"}, "total_available_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Available Hours", "type": "string"}, "previous_utilization_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Previous Utilization Rate"}, "utilization_change_percent": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "title": "Utilization Change Percent"}, "utilization_trend": {"default": "neutral", "title": "Utilization Trend", "type": "string"}, "utilization_by_resource": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsUtilizationItem"}, "title": "Utilization By Resource", "type": "array"}, "utilization_by_category": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsUtilizationItem"}, "title": "Utilization By Category", "type": "array"}}, "required": ["total_booked_hours", "total_available_hours"], "title": "AnalyticsResourcesUtilization", "type": "object"}, "AnalyticsUtilizationItem": {"description": "Booked against available hours, for one resource or one category.\n\n`utilization_rate` is None when the entity has no weekly schedule on file \u2014 capacity is\nunknown, not zero, and a rate of 0% would read as \"idle\".", "properties": {"name": {"title": "Name", "type": "string"}, "booked_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Booked Hours", "type": "string"}, "available_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Available Hours", "type": "string"}, "utilization_rate": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Utilization Rate"}}, "required": ["name", "booked_hours", "available_hours"], "title": "AnalyticsUtilizationItem", "type": "object"}, "AnalyticsCapacityForecastItem": {"description": "Booked demand against available capacity for one month of the horizon.", "properties": {"period": {"title": "Period", "type": "string"}, "demand_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Demand Hours", "type": "string"}, "capacity_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Capacity Hours", "type": "string"}, "gap_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Gap Hours", "type": "string"}}, "required": ["period", "demand_hours", "capacity_hours", "gap_hours"], "title": "AnalyticsCapacityForecastItem", "type": "object"}, "AnalyticsCapacityResourceItem": {"description": "Capacity for a single resource. `category` is its parent in the resource hierarchy.", "properties": {"name": {"title": "Name", "type": "string"}, "category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Category"}, "total_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Hours", "type": "string"}, "allocated_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Allocated Hours", "type": "string"}, "available_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Available Hours", "type": "string"}}, "required": ["name", "total_hours", "allocated_hours", "available_hours"], "title": "AnalyticsCapacityResourceItem", "type": "object"}, "AnalyticsResourcesCapacity": {"description": "Capacity planning metrics. The forecast runs FORWARD from the current month.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "total_capacity_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Capacity Hours", "type": "string"}, "allocated_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Allocated Hours", "type": "string"}, "available_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Available Hours", "type": "string"}, "capacity_by_resource": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsCapacityResourceItem"}, "title": "Capacity By Resource", "type": "array"}, "capacity_forecast": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsCapacityForecastItem"}, "title": "Capacity Forecast", "type": "array"}}, "required": ["total_capacity_hours", "allocated_hours", "available_hours"], "title": "AnalyticsResourcesCapacity", "type": "object"}, "AnalyticsAllocationItem": {"description": "Allocation for a single entity", "properties": {"name": {"title": "Name", "type": "string"}, "allocated_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Allocated Hours", "type": "string"}, "percent_of_total": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percent Of Total", "type": "string"}}, "required": ["name", "allocated_hours", "percent_of_total"], "title": "AnalyticsAllocationItem", "type": "object"}, "AnalyticsResourcesAllocation": {"description": "Where the equipment is committed over the next `horizon_days`, by project and by client.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "horizon_days": {"title": "Horizon Days", "type": "integer"}, "allocation_efficiency": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Allocation Efficiency"}, "overallocated_resources": {"title": "Overallocated Resources", "type": "integer"}, "underallocated_resources": {"title": "Underallocated Resources", "type": "integer"}, "allocation_by_project": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsAllocationItem"}, "title": "Allocation By Project", "type": "array"}, "allocation_by_client": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsAllocationItem"}, "title": "Allocation By Client", "type": "array"}}, "required": ["horizon_days", "overallocated_resources", "underallocated_resources"], "title": "AnalyticsResourcesAllocation", "type": "object"}, "SupportKPIs": {"description": "Support KPIs - Ticket volume and performance from real data.\n\nShows: Open tickets (internal/external), resolution time, first response, success rate.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "internal_open": {"title": "Internal Open", "type": "integer"}, "external_open": {"title": "External Open", "type": "integer"}, "total_open": {"title": "Total Open", "type": "integer"}, "volume_status": {"title": "Volume Status", "type": "string"}, "internal_closed": {"title": "Internal Closed", "type": "integer"}, "external_closed": {"title": "External Closed", "type": "integer"}, "total_closed": {"title": "Total Closed", "type": "integer"}, "avg_resolution_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Avg Resolution Hours", "type": "string"}, "avg_first_response_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Avg First Response Hours", "type": "string"}, "success_rate": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Success Rate", "type": "string"}, "success_status": {"title": "Success Status", "type": "string"}}, "required": ["internal_open", "external_open", "total_open", "volume_status", "internal_closed", "external_closed", "total_closed", "avg_resolution_hours", "avg_first_response_hours", "success_rate", "success_status"], "title": "SupportKPIs", "type": "object"}, "AnalyticsSupportTickets": {"description": "Support ticket volume and distribution analysis - Internal and External sections", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "internal_total": {"title": "Internal Total", "type": "integer"}, "internal_open": {"title": "Internal Open", "type": "integer"}, "internal_closed": {"title": "Internal Closed", "type": "integer"}, "internal_by_status": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTicketCategoryItem"}, "title": "Internal By Status", "type": "array"}, "internal_by_severity": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTicketCategoryItem"}, "title": "Internal By Severity", "type": "array"}, "internal_by_type": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTicketCategoryItem"}, "title": "Internal By Type", "type": "array"}, "internal_by_queue": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTicketCategoryItem"}, "title": "Internal By Queue", "type": "array"}, "external_total": {"title": "External Total", "type": "integer"}, "external_open": {"title": "External Open", "type": "integer"}, "external_closed": {"title": "External Closed", "type": "integer"}, "external_by_status": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTicketCategoryItem"}, "title": "External By Status", "type": "array"}, "external_by_severity": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTicketCategoryItem"}, "title": "External By Severity", "type": "array"}, "external_by_type": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTicketCategoryItem"}, "title": "External By Type", "type": "array"}, "external_by_queue": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTicketCategoryItem"}, "title": "External By Queue", "type": "array"}}, "required": ["internal_total", "internal_open", "internal_closed", "external_total", "external_open", "external_closed"], "title": "AnalyticsSupportTickets", "type": "object"}, "AnalyticsTicketCategoryItem": {"description": "Tickets by category", "properties": {"category": {"title": "Category", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "percent_of_total": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percent Of Total", "type": "string"}}, "required": ["category", "count", "percent_of_total"], "title": "AnalyticsTicketCategoryItem", "type": "object"}, "AnalyticsQueueBacklogItem": {"description": "Queue backlog item", "properties": {"queue": {"title": "Queue", "type": "string"}, "ticket_type": {"title": "Ticket Type", "type": "string"}, "open_count": {"title": "Open Count", "type": "integer"}}, "required": ["queue", "ticket_type", "open_count"], "title": "AnalyticsQueueBacklogItem", "type": "object"}, "AnalyticsResolutionBySeverityItem": {"description": "Resolution time by severity", "properties": {"severity": {"title": "Severity", "type": "string"}, "ticket_type": {"title": "Ticket Type", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "avg_resolution_hours": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Avg Resolution Hours", "type": "string"}}, "required": ["severity", "ticket_type", "count", "avg_resolution_hours"], "title": "AnalyticsResolutionBySeverityItem", "type": "object"}, "AnalyticsResolutionOutcomeItem": {"description": "Resolution outcome distribution", "properties": {"resolution": {"title": "Resolution", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "percent_of_total": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percent Of Total", "type": "string"}}, "required": ["resolution", "count", "percent_of_total"], "title": "AnalyticsResolutionOutcomeItem", "type": "object"}, "AnalyticsSupportSLA": {"description": "Support performance metrics (actual data, no SLA targets)", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "resolution_by_severity": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsResolutionBySeverityItem"}, "title": "Resolution By Severity", "type": "array"}, "resolution_outcomes": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsResolutionOutcomeItem"}, "title": "Resolution Outcomes", "type": "array"}, "queue_backlog": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsQueueBacklogItem"}, "title": "Queue Backlog", "type": "array"}, "total_closed_period": {"title": "Total Closed Period", "type": "integer"}, "prev_total_closed": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Prev Total Closed"}, "closed_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Closed Change Pct"}}, "required": ["total_closed_period"], "title": "AnalyticsSupportSLA", "type": "object"}, "AnalyticsIssueTypeItem": {"description": "Top issue type", "properties": {"issue_type": {"title": "Issue Type", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "percent_of_total": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percent Of Total", "type": "string"}}, "required": ["issue_type", "count", "percent_of_total"], "title": "AnalyticsIssueTypeItem", "type": "object"}, "AnalyticsSupportTrends": {"description": "Support trend analysis", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "monthly_trend": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTrendMonthItem"}, "title": "Monthly Trend", "type": "array"}, "top_issue_types": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsIssueTypeItem"}, "title": "Top Issue Types", "type": "array"}, "total_created": {"default": 0, "title": "Total Created", "type": "integer"}, "total_closed": {"default": 0, "title": "Total Closed", "type": "integer"}, "prev_total_created": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Prev Total Created"}, "prev_total_closed": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Prev Total Closed"}, "created_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Created Change Pct"}, "closed_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Closed Change Pct"}}, "title": "AnalyticsSupportTrends", "type": "object"}, "AnalyticsTrendMonthItem": {"description": "Trend for a single month - created vs closed", "properties": {"month": {"title": "Month", "type": "string"}, "created": {"title": "Created", "type": "integer"}, "closed": {"title": "Closed", "type": "integer"}}, "required": ["month", "created", "closed"], "title": "AnalyticsTrendMonthItem", "type": "object"}, "FormsKPIs": {"description": "Forms KPIs - Form collection state and review pipeline from real data.\n\nShows: Active forms, in-period submissions with a source split, review backlog, review rate.", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "active_forms": {"title": "Active Forms", "type": "integer"}, "total_forms": {"title": "Total Forms", "type": "integer"}, "period_submissions": {"title": "Period Submissions", "type": "integer"}, "internal_submissions": {"title": "Internal Submissions", "type": "integer"}, "portal_submissions": {"title": "Portal Submissions", "type": "integer"}, "partner_submissions": {"title": "Partner Submissions", "type": "integer"}, "backlog_new": {"title": "Backlog New", "type": "integer"}, "backlog_status": {"title": "Backlog Status", "type": "string"}, "reviewed_period": {"title": "Reviewed Period", "type": "integer"}, "archived_period": {"title": "Archived Period", "type": "integer"}, "review_rate": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Review Rate", "type": "string"}, "review_status": {"title": "Review Status", "type": "string"}}, "required": ["active_forms", "total_forms", "period_submissions", "internal_submissions", "portal_submissions", "partner_submissions", "backlog_new", "backlog_status", "reviewed_period", "archived_period", "review_rate", "review_status"], "title": "FormsKPIs", "type": "object"}, "AnalyticsFormsMonthItem": {"description": "Submission volume for a single month", "properties": {"month": {"title": "Month", "type": "string"}, "submissions": {"title": "Submissions", "type": "integer"}}, "required": ["month", "submissions"], "title": "AnalyticsFormsMonthItem", "type": "object"}, "AnalyticsFormsVolume": {"description": "Form submission volume over the selected period", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "monthly_volume": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsFormsMonthItem"}, "title": "Monthly Volume", "type": "array"}, "total_submissions": {"default": 0, "title": "Total Submissions", "type": "integer"}, "prev_total_submissions": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Prev Total Submissions"}, "submissions_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Submissions Change Pct"}}, "title": "AnalyticsFormsVolume", "type": "object"}, "AnalyticsFormsBreakdown": {"description": "Submission breakdown by review status and by source", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "by_status": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsFormsCountItem"}, "title": "By Status", "type": "array"}, "by_source": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsFormsCountItem"}, "title": "By Source", "type": "array"}, "total_submissions": {"default": 0, "title": "Total Submissions", "type": "integer"}, "prev_total_submissions": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Prev Total Submissions"}, "total_change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Total Change Pct"}}, "title": "AnalyticsFormsBreakdown", "type": "object"}, "AnalyticsFormsCountItem": {"description": "A labeled count slice (status or source breakdown)", "properties": {"label": {"title": "Label", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "prev_count": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Prev Count"}, "change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Change Pct"}}, "required": ["label", "count"], "title": "AnalyticsFormsCountItem", "type": "object"}, "AnalyticsFormsTop": {"description": "Top forms by submission volume in the selected period", "properties": {"period": {"default": "YTD", "title": "Period", "type": "string"}, "temporal_type": {"default": "snapshot", "title": "Temporal Type", "type": "string"}, "generated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Generated At"}, "period_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Period Label"}, "horizon": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon"}, "horizon_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Horizon Label"}, "horizon_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/HorizonOption"}, "type": "array"}, {"type": "null"}], "title": "Horizon Options"}, "compare": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare"}, "compare_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Compare Label"}, "compare_options": {"anyOf": [{"items": {"$ref": "#/components/schemas/CompareOption"}, "type": "array"}, {"type": "null"}], "title": "Compare Options"}, "filter_severity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity"}, "filter_severity_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Severity Label"}, "filter_category": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category"}, "filter_category_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Category Label"}, "filter_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type"}, "filter_type_label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Filter Type Label"}, "top_forms": {"default": [], "items": {"$ref": "#/components/schemas/AnalyticsTopFormItem"}, "title": "Top Forms", "type": "array"}, "total_submissions": {"default": 0, "title": "Total Submissions", "type": "integer"}}, "title": "AnalyticsFormsTop", "type": "object"}, "AnalyticsTopFormItem": {"description": "One form ranked by submission volume", "properties": {"name": {"title": "Name", "type": "string"}, "form_id": {"title": "Form Id", "type": "string"}, "count": {"title": "Count", "type": "integer"}, "percent_of_total": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Percent Of Total", "type": "string"}, "prev_count": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Prev Count"}, "change_pct": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "string"}, {"type": "null"}], "description": "A percentage, or \"new\" when the prior period had nothing to compare against.", "title": "Change Pct"}}, "required": ["name", "form_id", "count", "percent_of_total"], "title": "AnalyticsTopFormItem", "type": "object"}, "TeamLoadSchema": {"description": "Complete team load data for a week", "properties": {"prev_week_param": {"title": "Prev Week Param", "type": "string"}, "next_week_param": {"title": "Next Week Param", "type": "string"}, "prev_week_label": {"title": "Prev Week Label", "type": "string"}, "next_week_label": {"title": "Next Week Label", "type": "string"}, "week_number": {"title": "Week Number", "type": "integer"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "start_date_param": {"title": "Start Date Param", "type": "string"}, "is_current_week": {"title": "Is Current Week", "type": "boolean"}, "is_past_week": {"title": "Is Past Week", "type": "boolean"}, "is_future_week": {"title": "Is Future Week", "type": "boolean"}, "columns": {"items": {"$ref": "#/components/schemas/DayColumnSchema"}, "title": "Columns", "type": "array"}, "team_members": {"items": {"$ref": "#/components/schemas/TeamMemberSummarySchema"}, "title": "Team Members", "type": "array"}, "daily_totals": {"additionalProperties": {"$ref": "#/components/schemas/DayLoadDataSchema"}, "title": "Daily Totals", "type": "object"}, "team_total_booked": {"title": "Team Total Booked", "type": "number"}, "team_total_available": {"title": "Team Total Available", "type": "number"}, "team_total_display": {"title": "Team Total Display", "type": "string"}, "team_load_percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Team Load Percentage", "type": "string"}}, "required": ["prev_week_param", "next_week_param", "prev_week_label", "next_week_label", "week_number", "start_date", "end_date", "start_date_param", "is_current_week", "is_past_week", "is_future_week", "columns", "team_members", "daily_totals", "team_total_booked", "team_total_available", "team_total_display", "team_load_percentage"], "title": "TeamLoadSchema", "type": "object"}, "ResourceLoadSchema": {"description": "Complete resource load data for a week - for all resources view", "properties": {"prev_week_param": {"title": "Prev Week Param", "type": "string"}, "next_week_param": {"title": "Next Week Param", "type": "string"}, "prev_week_label": {"title": "Prev Week Label", "type": "string"}, "next_week_label": {"title": "Next Week Label", "type": "string"}, "week_number": {"title": "Week Number", "type": "integer"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "start_date_param": {"title": "Start Date Param", "type": "string"}, "is_current_week": {"title": "Is Current Week", "type": "boolean"}, "is_past_week": {"title": "Is Past Week", "type": "boolean"}, "is_future_week": {"title": "Is Future Week", "type": "boolean"}, "columns": {"items": {"$ref": "#/components/schemas/DayColumnSchema"}, "title": "Columns", "type": "array"}, "resources": {"items": {"$ref": "#/components/schemas/TeamMemberSummarySchema"}, "title": "Resources", "type": "array"}, "daily_totals": {"additionalProperties": {"$ref": "#/components/schemas/DayLoadDataSchema"}, "title": "Daily Totals", "type": "object"}, "resource_total_booked": {"title": "Resource Total Booked", "type": "number"}, "resource_total_available": {"title": "Resource Total Available", "type": "number"}, "resource_total_display": {"title": "Resource Total Display", "type": "string"}, "resource_load_percentage": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Resource Load Percentage", "type": "string"}}, "required": ["prev_week_param", "next_week_param", "prev_week_label", "next_week_label", "week_number", "start_date", "end_date", "start_date_param", "is_current_week", "is_past_week", "is_future_week", "columns", "resources", "daily_totals", "resource_total_booked", "resource_total_available", "resource_total_display", "resource_load_percentage"], "title": "ResourceLoadSchema", "type": "object"}, "OutputLanguageOption": {"properties": {"code": {"title": "Code", "type": "string"}, "label": {"title": "Label", "type": "string"}}, "required": ["code", "label"], "title": "OutputLanguageOption", "type": "object"}, "OutputMyProfile": {"description": "The account-level profile the mobile app reads: one language preference\nshared with the web (User.language drives both surfaces).", "properties": {"email": {"title": "Email", "type": "string"}, "full_name": {"title": "Full Name", "type": "string"}, "language": {"title": "Language", "type": "string"}, "timezone": {"title": "Timezone", "type": "string"}, "languages": {"items": {"$ref": "#/components/schemas/OutputLanguageOption"}, "title": "Languages", "type": "array"}}, "required": ["email", "full_name", "language", "timezone", "languages"], "title": "OutputMyProfile", "type": "object"}, "EditMyProfile": {"description": "Partial: an omitted key keeps the stored value. `language` is one of the platform's\nlanguages, such as `en` or `ro`.", "properties": {"language": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Language"}}, "title": "EditMyProfile", "type": "object"}, "MyPendingInvitation": {"description": "Individual pending invitation for the current user", "properties": {"id": {"title": "Id", "type": "string"}, "tenant_name": {"title": "Tenant Name", "type": "string"}, "invited_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Invited By"}}, "required": ["id", "tenant_name"], "title": "MyPendingInvitation", "type": "object"}, "MyTenantItem": {"description": "Individual tenant/workspace the current user belongs to", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "path": {"title": "Path", "type": "string"}, "logo_url": {"title": "Logo Url", "type": "string"}, "is_owner": {"title": "Is Owner", "type": "boolean"}, "member_id": {"title": "Member Id", "type": "string"}}, "required": ["id", "name", "path", "logo_url", "is_owner", "member_id"], "title": "MyTenantItem", "type": "object"}, "OutputMyTenants": {"description": "Cross-tenant list of workspaces the current user belongs to (active memberships only)", "properties": {"tenants": {"items": {"$ref": "#/components/schemas/MyTenantItem"}, "title": "Tenants", "type": "array"}, "invitations": {"items": {"$ref": "#/components/schemas/MyPendingInvitation"}, "title": "Invitations", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}}, "required": ["tenants", "invitations", "total_count"], "title": "OutputMyTenants", "type": "object"}, "MyWorkItem": {"description": "Individual work item for cross-tenant My Work view", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "percent_complete": {"title": "Percent Complete", "type": "integer"}, "planned_end": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Planned End"}, "project_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Name"}, "project_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "tenant_name": {"title": "Tenant Name", "type": "string"}, "tenant_path": {"title": "Tenant Path", "type": "string"}, "hierarchy_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Hierarchy Id"}, "item_type_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Item Type Name"}, "item_type_behaviour": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Item Type Behaviour"}, "urgency_group": {"title": "Urgency Group", "type": "string"}, "url": {"title": "Url", "type": "string"}}, "required": ["id", "name", "percent_complete", "tenant_name", "tenant_path", "urgency_group", "url"], "title": "MyWorkItem", "type": "object"}, "OutputMyWorkItems": {"description": "Cross-tenant work items assigned to the current user", "properties": {"work_items": {"items": {"$ref": "#/components/schemas/MyWorkItem"}, "title": "Work Items", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}, "overdue_count": {"title": "Overdue Count", "type": "integer"}, "due_today_count": {"title": "Due Today Count", "type": "integer"}, "due_this_week_count": {"title": "Due This Week Count", "type": "integer"}, "upcoming_count": {"title": "Upcoming Count", "type": "integer"}, "no_date_count": {"title": "No Date Count", "type": "integer"}}, "required": ["work_items", "total_count", "overdue_count", "due_today_count", "due_this_week_count", "upcoming_count", "no_date_count"], "title": "OutputMyWorkItems", "type": "object"}, "MyTicketItem": {"description": "Individual support ticket for cross-tenant My Tickets view", "properties": {"id": {"title": "Id", "type": "string"}, "public_reference": {"title": "Public Reference", "type": "string"}, "title": {"title": "Title", "type": "string"}, "severity_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Severity Name"}, "severity_score": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Severity Score"}, "status_name": {"title": "Status Name", "type": "string"}, "status_lifecycle": {"title": "Status Lifecycle", "type": "string"}, "tenant_name": {"title": "Tenant Name", "type": "string"}, "tenant_path": {"title": "Tenant Path", "type": "string"}, "ticket_type": {"title": "Ticket Type", "type": "string"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "url": {"title": "Url", "type": "string"}}, "required": ["id", "public_reference", "title", "status_name", "status_lifecycle", "tenant_name", "tenant_path", "ticket_type", "url"], "title": "MyTicketItem", "type": "object"}, "OutputMyTickets": {"description": "Cross-tenant support tickets assigned to the current user", "properties": {"tickets": {"items": {"$ref": "#/components/schemas/MyTicketItem"}, "title": "Tickets", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}, "internal_count": {"title": "Internal Count", "type": "integer"}, "external_count": {"title": "External Count", "type": "integer"}}, "required": ["tickets", "total_count", "internal_count", "external_count"], "title": "OutputMyTickets", "type": "object"}, "MyBookingItem": {"description": "Individual booking for cross-tenant My Schedule view", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "project_name": {"title": "Project Name", "type": "string"}, "project_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project Id"}, "product_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Product Name"}, "start_date": {"format": "date", "title": "Start Date", "type": "string"}, "end_date": {"format": "date", "title": "End Date", "type": "string"}, "hours_per_day": {"title": "Hours Per Day", "type": "integer"}, "tenant_name": {"title": "Tenant Name", "type": "string"}, "tenant_path": {"title": "Tenant Path", "type": "string"}, "member_id": {"title": "Member Id", "type": "string"}, "schedule_group": {"title": "Schedule Group", "type": "string"}, "url": {"title": "Url", "type": "string"}}, "required": ["id", "name", "project_name", "start_date", "end_date", "hours_per_day", "tenant_name", "tenant_path", "member_id", "schedule_group", "url"], "title": "MyBookingItem", "type": "object"}, "OutputMyBookings": {"description": "Cross-tenant bookings for the current user", "properties": {"bookings": {"items": {"$ref": "#/components/schemas/MyBookingItem"}, "title": "Bookings", "type": "array"}, "total_count": {"title": "Total Count", "type": "integer"}, "current_count": {"title": "Current Count", "type": "integer"}, "upcoming_count": {"title": "Upcoming Count", "type": "integer"}}, "required": ["bookings", "total_count", "current_count", "upcoming_count"], "title": "OutputMyBookings", "type": "object"}, "MyOperationalItem": {"description": "Individual operational item for cross-tenant welcome page", "properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "process_name": {"title": "Process Name", "type": "string"}, "current_stage_name": {"title": "Current Stage Name", "type": "string"}, "current_stage_type": {"title": "Current Stage Type", "type": "string"}, "priority": {"title": "Priority", "type": "string"}, "priority_display": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Priority Display"}, "due_date": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Due Date"}, "is_finished": {"title": "Is Finished", "type": "boolean"}, "tenant_name": {"title": "Tenant Name", "type": "string"}, "tenant_path": {"title": "Tenant Path", "type": "string"}, "owner_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Owner Name"}, "customer_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Customer Name"}, "requires_approval": {"default": false, "title": "Requires Approval", "type": "boolean"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "stage_age_hours": {"default": 0, "title": "Stage Age Hours", "type": "integer"}, "url": {"title": "Url", "type": "string"}}, "required": ["id", "name", "process_name", "current_stage_name", "current_stage_type", "priority", "is_finished", "tenant_name", "tenant_path", "created_at", "url"], "title": "MyOperationalItem", "type": "object"}, "OutputMyOperationalItems": {"properties": {"approvals": {"items": {"$ref": "#/components/schemas/MyOperationalItem"}, "title": "Approvals", "type": "array"}, "pending_approval": {"items": {"$ref": "#/components/schemas/MyOperationalItem"}, "title": "Pending Approval", "type": "array"}, "active": {"items": {"$ref": "#/components/schemas/MyOperationalItem"}, "title": "Active", "type": "array"}, "approvals_count": {"default": 0, "title": "Approvals Count", "type": "integer"}, "pending_approval_count": {"default": 0, "title": "Pending Approval Count", "type": "integer"}, "active_count": {"default": 0, "title": "Active Count", "type": "integer"}}, "required": ["approvals", "pending_approval", "active"], "title": "OutputMyOperationalItems", "type": "object"}, "CompanyEnrichmentResultSchema": {"properties": {"cui": {"title": "Cui", "type": "string"}, "name": {"title": "Name", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_vat_registered": {"title": "Is Vat Registered", "type": "boolean"}, "address": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Address"}, "registration_number": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Registration Number"}, "caen_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Caen Code"}, "region": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Region"}, "city": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "City"}, "postal_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Postal Code"}, "address_detail": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Address Detail"}, "error_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Error Message"}}, "required": ["cui", "name", "is_active", "is_vat_registered"], "title": "CompanyEnrichmentResultSchema", "type": "object"}, "OutputWebhook": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "target_url": {"title": "Target Url", "type": "string"}, "event_types": {"items": {"type": "string"}, "title": "Event Types", "type": "array"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_secure": {"title": "Is Secure", "type": "boolean"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Created By"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "last_delivery_status": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Last Delivery Status"}, "failure_count": {"default": 0, "title": "Failure Count", "type": "integer"}}, "required": ["id", "name", "target_url", "event_types", "is_active", "is_secure", "created_at"], "title": "OutputWebhook", "type": "object"}, "OutputWebhooks": {"properties": {"webhooks": {"items": {"$ref": "#/components/schemas/OutputWebhook"}, "title": "Webhooks", "type": "array"}}, "required": ["webhooks"], "title": "OutputWebhooks", "type": "object"}, "OutputWebhookDeliveries": {"properties": {"deliveries": {"items": {"$ref": "#/components/schemas/OutputWebhookDelivery"}, "title": "Deliveries", "type": "array"}, "total": {"default": 0, "title": "Total", "type": "integer"}}, "required": ["deliveries"], "title": "OutputWebhookDeliveries", "type": "object"}, "OutputWebhookDelivery": {"properties": {"id": {"title": "Id", "type": "string"}, "event_id": {"title": "Event Id", "type": "string"}, "event_type": {"title": "Event Type", "type": "string"}, "http_status": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Http Status"}, "error_message": {"default": "", "title": "Error Message", "type": "string"}, "attempt": {"default": 1, "title": "Attempt", "type": "integer"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "duration_ms": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Ms"}}, "required": ["id", "event_id", "event_type", "created_at"], "title": "OutputWebhookDelivery", "type": "object"}, "WebhookCreated": {"description": "`add_webhook` answer: the new endpoint's id, and \u2014 for a secure endpoint \u2014 its\nsigning secret, returned once, here only. The browser also gets it via the session\nfor one-time display; an API client has no session, so this is its only chance.", "properties": {"response_id": {"title": "Response Id", "type": "string"}, "success": {"title": "Success", "type": "boolean"}, "message": {"title": "Message", "type": "string"}, "url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Url"}, "webhook_id": {"title": "Webhook Id", "type": "string"}, "secret_key": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Secret Key"}}, "required": ["response_id", "success", "message", "webhook_id"], "title": "WebhookCreated", "type": "object"}, "AddWebhook": {"properties": {"name": {"title": "Name", "type": "string"}, "target_url": {"title": "Target Url", "type": "string"}, "event_types": {"default": [], "items": {"type": "string"}, "title": "Event Types", "type": "array"}, "is_active": {"default": false, "title": "Is Active", "type": "boolean"}, "is_secure": {"default": false, "title": "Is Secure", "type": "boolean"}}, "required": ["name", "target_url"], "title": "AddWebhook", "type": "object"}, "EditWebhook": {"properties": {"name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Name"}, "target_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Target Url"}, "event_types": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Event Types"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}, "is_secure": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Secure"}}, "title": "EditWebhook", "type": "object"}, "OutputTestWebhookResult": {"properties": {"success": {"title": "Success", "type": "boolean"}, "message": {"title": "Message", "type": "string"}, "status_code": {"default": 0, "title": "Status Code", "type": "integer"}, "duration_ms": {"default": 0, "title": "Duration Ms", "type": "integer"}, "response_body": {"default": "", "title": "Response Body", "type": "string"}, "error_type": {"default": "", "title": "Error Type", "type": "string"}}, "required": ["success", "message"], "title": "OutputTestWebhookResult", "type": "object"}, "TestWebhook": {"properties": {"event_type": {"title": "Event Type", "type": "string"}}, "required": ["event_type"], "title": "TestWebhook", "type": "object"}, "OutputCustomForm": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "slug": {"title": "Slug", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}, "data_classification": {"title": "Data Classification", "type": "string"}, "retention_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Retention Days"}, "active_version": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Active Version"}, "version_count": {"default": 0, "title": "Version Count", "type": "integer"}, "submission_count": {"default": 0, "title": "Submission Count", "type": "integer"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["id", "name", "slug", "is_active", "data_classification", "created_at", "updated_at"], "title": "OutputCustomForm", "type": "object"}, "OutputCustomForms": {"properties": {"custom_forms": {"items": {"$ref": "#/components/schemas/OutputCustomForm"}, "title": "Custom Forms", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}}, "required": ["custom_forms"], "title": "OutputCustomForms", "type": "object"}, "EditCustomForm": {"properties": {"name": {"maxLength": 200, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "slug": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Slug"}, "submit_button_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "Submit", "title": "Submit Button Text"}, "success_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Success Message"}, "is_active": {"default": true, "title": "Is Active", "type": "boolean"}, "data_classification": {"default": "internal", "enum": ["internal", "confidential", "personal_data"], "title": "Data Classification", "type": "string"}, "retention_days": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Retention Days"}, "notify_on_submit": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "default": [], "title": "Notify On Submit"}}, "required": ["name"], "title": "EditCustomForm", "type": "object"}, "OutputFormVersion": {"properties": {"id": {"title": "Id", "type": "string"}, "form_id": {"title": "Form Id", "type": "string"}, "version": {"title": "Version", "type": "integer"}, "is_active": {"title": "Is Active", "type": "boolean"}, "is_locked": {"title": "Is Locked", "type": "boolean"}, "step_count": {"default": 0, "title": "Step Count", "type": "integer"}, "field_count": {"default": 0, "title": "Field Count", "type": "integer"}, "submission_count": {"default": 0, "title": "Submission Count", "type": "integer"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["id", "form_id", "version", "is_active", "is_locked", "created_at"], "title": "OutputFormVersion", "type": "object"}, "OutputFormVersions": {"properties": {"form_id": {"title": "Form Id", "type": "string"}, "versions": {"items": {"$ref": "#/components/schemas/OutputFormVersion"}, "title": "Versions", "type": "array"}}, "required": ["form_id", "versions"], "title": "OutputFormVersions", "type": "object"}, "OutputFormField": {"properties": {"id": {"title": "Id", "type": "string"}, "step_id": {"title": "Step Id", "type": "string"}, "form_version_id": {"title": "Form Version Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "label": {"title": "Label", "type": "string"}, "field_type": {"title": "Field Type", "type": "string"}, "sequence": {"title": "Sequence", "type": "integer"}, "required": {"title": "Required", "type": "boolean"}, "placeholder": {"default": "", "title": "Placeholder", "type": "string"}, "help_text": {"default": "", "title": "Help Text", "type": "string"}, "options": {"anyOf": [{"additionalProperties": true, "type": "object"}, {"type": "null"}], "title": "Options"}, "is_summary_field": {"title": "Is Summary Field", "type": "boolean"}, "is_personal_data": {"title": "Is Personal Data", "type": "boolean"}}, "required": ["id", "step_id", "form_version_id", "name", "label", "field_type", "sequence", "required", "is_summary_field", "is_personal_data"], "title": "OutputFormField", "type": "object"}, "OutputFormFields": {"properties": {"version_id": {"title": "Version Id", "type": "string"}, "fields": {"items": {"$ref": "#/components/schemas/OutputFormField"}, "title": "Fields", "type": "array"}, "steps": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Steps", "type": "array"}, "is_locked": {"default": false, "title": "Is Locked", "type": "boolean"}}, "required": ["version_id", "fields"], "title": "OutputFormFields", "type": "object"}, "AddCustomForm": {"properties": {"name": {"maxLength": 200, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "slug": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Slug"}, "submit_button_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "Submit", "title": "Submit Button Text"}, "success_message": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Success Message"}, "is_active": {"default": true, "title": "Is Active", "type": "boolean"}, "data_classification": {"default": "internal", "enum": ["internal", "confidential", "personal_data"], "title": "Data Classification", "type": "string"}, "retention_days": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Retention Days"}, "notify_on_submit": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "default": [], "title": "Notify On Submit"}}, "required": ["name"], "title": "AddCustomForm", "type": "object"}, "AddFormField": {"properties": {"name": {"maxLength": 100, "minLength": 1, "title": "Name", "type": "string"}, "label": {"maxLength": 200, "minLength": 1, "title": "Label", "type": "string"}, "field_type": {"enum": ["text", "textarea", "email", "phone", "url", "integer", "decimal", "date", "datetime", "boolean", "select", "multiselect", "radio", "scale", "country", "coordinates"], "title": "Field Type", "type": "string"}, "step_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Step Id"}, "sequence": {"default": 0, "title": "Sequence", "type": "integer"}, "required": {"default": false, "title": "Required", "type": "boolean"}, "is_summary_field": {"default": false, "title": "Is Summary Field", "type": "boolean"}, "is_personal_data": {"default": false, "title": "Is Personal Data", "type": "boolean"}, "placeholder": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Placeholder"}, "help_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Help Text"}, "choices": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Choices"}, "min_length": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Min Length"}, "max_length": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Max Length"}, "min_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Min Value"}, "max_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Max Value"}, "scale_min": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Scale Min"}, "scale_max": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Scale Max"}}, "required": ["name", "label", "field_type"], "title": "AddFormField", "type": "object"}, "EditFormField": {"properties": {"name": {"maxLength": 100, "minLength": 1, "title": "Name", "type": "string"}, "label": {"maxLength": 200, "minLength": 1, "title": "Label", "type": "string"}, "field_type": {"enum": ["text", "textarea", "email", "phone", "url", "integer", "decimal", "date", "datetime", "boolean", "select", "multiselect", "radio", "scale", "country", "coordinates"], "title": "Field Type", "type": "string"}, "step_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Step Id"}, "sequence": {"default": 0, "title": "Sequence", "type": "integer"}, "required": {"default": false, "title": "Required", "type": "boolean"}, "is_summary_field": {"default": false, "title": "Is Summary Field", "type": "boolean"}, "is_personal_data": {"default": false, "title": "Is Personal Data", "type": "boolean"}, "placeholder": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Placeholder"}, "help_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Help Text"}, "choices": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Choices"}, "min_length": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Min Length"}, "max_length": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Max Length"}, "min_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Min Value"}, "max_value": {"anyOf": [{"type": "number"}, {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Max Value"}, "scale_min": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Scale Min"}, "scale_max": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Scale Max"}}, "required": ["name", "label", "field_type"], "title": "EditFormField", "type": "object"}, "FormSubmissionsSchema": {"description": "Full-result-set payload for the client-side submissions datatable (Part 5, Option A).\n`columns` are fixed + dynamic-summary headers; each row carries a pivoted `values` map.\n`export_url`, when set by the list worker, surfaces the surface's CSV-download link (M-1).", "properties": {"columns": {"items": {"additionalProperties": true, "type": "object"}, "title": "Columns", "type": "array"}, "dynamic_columns": {"items": {"additionalProperties": true, "type": "object"}, "title": "Dynamic Columns", "type": "array"}, "submissions": {"items": {"additionalProperties": true, "type": "object"}, "title": "Submissions", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}, "export_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Export Url"}}, "required": ["columns", "dynamic_columns", "submissions"], "title": "FormSubmissionsSchema", "type": "object"}, "FormSubmissionDetailSchema": {"description": "One submission rendered against its OWN version's fields (historical accuracy).", "properties": {"submission_id": {"title": "Submission Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}, "submitted_at": {"format": "date-time", "title": "Submitted At", "type": "string"}, "submitter_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Submitter Name"}, "submitter_email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Submitter Email"}, "status": {"title": "Status", "type": "string"}, "status_options": {"default": [], "items": {"additionalProperties": true, "type": "object"}, "title": "Status Options", "type": "array"}, "all_fields": {"items": {"additionalProperties": true, "type": "object"}, "title": "All Fields", "type": "array"}, "values": {"additionalProperties": true, "title": "Values", "type": "object"}}, "required": ["submission_id", "form_name", "submitted_at", "status", "all_fields", "values"], "title": "FormSubmissionDetailSchema", "type": "object"}, "EditSubmissionStatus": {"properties": {"submission_id": {"title": "Submission Id", "type": "string"}, "status": {"enum": ["new", "reviewed", "archived"], "title": "Status", "type": "string"}}, "required": ["submission_id", "status"], "title": "EditSubmissionStatus", "type": "object"}, "OutputAssetForm": {"description": "One form attached to an asset (Part 6), with this link's submission count.", "properties": {"id": {"title": "Id", "type": "string"}, "form_id": {"title": "Form Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}, "sequence": {"default": 0, "title": "Sequence", "type": "integer"}, "inspection_interval_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Inspection Interval Days"}, "submission_count": {"default": 0, "title": "Submission Count", "type": "integer"}, "has_active_version": {"default": false, "title": "Has Active Version", "type": "boolean"}}, "required": ["id", "form_id", "form_name"], "title": "OutputAssetForm", "type": "object"}, "OutputAssetForms": {"properties": {"asset_id": {"title": "Asset Id", "type": "string"}, "forms": {"items": {"$ref": "#/components/schemas/OutputAssetForm"}, "title": "Forms", "type": "array"}}, "required": ["asset_id", "forms"], "title": "OutputAssetForms", "type": "object"}, "AttachFormToAsset": {"properties": {"custom_form_id": {"title": "Custom Form Id", "type": "string"}, "inspection_interval_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Inspection Interval Days"}, "sequence": {"default": 0, "title": "Sequence", "type": "integer"}}, "required": ["custom_form_id"], "title": "AttachFormToAsset", "type": "object"}, "OutputProcessStageForm": {"description": "One form attached to a process stage (Part 7), with its gating policy.", "properties": {"id": {"title": "Id", "type": "string"}, "form_id": {"title": "Form Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}, "is_required": {"default": false, "title": "Is Required", "type": "boolean"}, "block_advancement": {"default": true, "title": "Block Advancement", "type": "boolean"}, "completion_deadline_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Completion Deadline Hours"}, "sequence": {"default": 0, "title": "Sequence", "type": "integer"}, "has_active_version": {"default": false, "title": "Has Active Version", "type": "boolean"}}, "required": ["id", "form_id", "form_name"], "title": "OutputProcessStageForm", "type": "object"}, "OutputProcessStageForms": {"properties": {"stage_id": {"title": "Stage Id", "type": "string"}, "forms": {"items": {"$ref": "#/components/schemas/OutputProcessStageForm"}, "title": "Forms", "type": "array"}}, "required": ["stage_id", "forms"], "title": "OutputProcessStageForms", "type": "object"}, "OutputWorkItemStageForm": {"description": "A stage-attached form as seen from a work item: adds this item's completion state.", "properties": {"id": {"title": "Id", "type": "string"}, "form_id": {"title": "Form Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}, "is_required": {"default": false, "title": "Is Required", "type": "boolean"}, "block_advancement": {"default": true, "title": "Block Advancement", "type": "boolean"}, "completion_deadline_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Completion Deadline Hours"}, "sequence": {"default": 0, "title": "Sequence", "type": "integer"}, "has_active_version": {"default": false, "title": "Has Active Version", "type": "boolean"}, "submitted": {"default": false, "title": "Submitted", "type": "boolean"}, "blocking": {"default": false, "title": "Blocking", "type": "boolean"}}, "required": ["id", "form_id", "form_name"], "title": "OutputWorkItemStageForm", "type": "object"}, "OutputWorkItemStageForms": {"properties": {"item_id": {"title": "Item Id", "type": "string"}, "forms": {"items": {"$ref": "#/components/schemas/OutputWorkItemStageForm"}, "title": "Forms", "type": "array"}, "has_blocking": {"default": false, "title": "Has Blocking", "type": "boolean"}}, "required": ["item_id", "forms"], "title": "OutputWorkItemStageForms", "type": "object"}, "OutputWorkItemSubmission": {"description": "One submission captured for a work item, rendered against its OWN version's fields\n(historical accuracy) for the persistent 'Form data' section on the work item card.", "properties": {"id": {"title": "Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}, "form_version": {"title": "Form Version", "type": "integer"}, "submitted_at": {"format": "date-time", "title": "Submitted At", "type": "string"}, "submitter_name": {"default": "", "title": "Submitter Name", "type": "string"}, "status": {"title": "Status", "type": "string"}, "status_color": {"default": "primary", "title": "Status Color", "type": "string"}, "status_label": {"default": "", "title": "Status Label", "type": "string"}, "fields": {"items": {"additionalProperties": true, "type": "object"}, "title": "Fields", "type": "array"}, "values": {"additionalProperties": true, "title": "Values", "type": "object"}}, "required": ["id", "form_name", "form_version", "submitted_at", "status", "fields", "values"], "title": "OutputWorkItemSubmission", "type": "object"}, "OutputWorkItemSubmissions": {"properties": {"item_id": {"title": "Item Id", "type": "string"}, "submissions": {"items": {"$ref": "#/components/schemas/OutputWorkItemSubmission"}, "title": "Submissions", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}}, "required": ["item_id", "submissions"], "title": "OutputWorkItemSubmissions", "type": "object"}, "AttachFormToProcessStage": {"properties": {"custom_form_id": {"title": "Custom Form Id", "type": "string"}, "is_required": {"default": false, "title": "Is Required", "type": "boolean"}, "block_advancement": {"default": false, "title": "Block Advancement", "type": "boolean"}, "completion_deadline_hours": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Completion Deadline Hours"}, "sequence": {"default": 0, "title": "Sequence", "type": "integer"}}, "required": ["custom_form_id"], "title": "AttachFormToProcessStage", "type": "object"}, "AddFormStep": {"properties": {"title": {"default": "", "title": "Title", "type": "string"}, "description": {"default": "", "title": "Description", "type": "string"}, "submit_button_text": {"default": "", "title": "Submit Button Text", "type": "string"}}, "title": "AddFormStep", "type": "object"}, "EditFormStep": {"properties": {"title": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Title"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "submit_button_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Submit Button Text"}}, "title": "EditFormStep", "type": "object"}, "ReorderFormSteps": {"properties": {"step_ids": {"items": {"type": "string"}, "title": "Step Ids", "type": "array"}}, "required": ["step_ids"], "title": "ReorderFormSteps", "type": "object"}, "ValidateFormStep": {"properties": {"step_id": {"title": "Step Id", "type": "string"}, "data": {"additionalProperties": true, "title": "Data", "type": "object"}}, "required": ["step_id", "data"], "title": "ValidateFormStep", "type": "object"}, "OutputPortalFormLink": {"description": "One form published to a customer subtenant's portal (management view).", "properties": {"id": {"title": "Id", "type": "string"}, "form_id": {"title": "Form Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}, "display_order": {"default": 0, "title": "Display Order", "type": "integer"}, "show_description": {"default": true, "title": "Show Description", "type": "boolean"}, "has_active_version": {"default": false, "title": "Has Active Version", "type": "boolean"}, "active_version": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Active Version"}, "submission_count": {"default": 0, "title": "Submission Count", "type": "integer"}}, "required": ["id", "form_id", "form_name"], "title": "OutputPortalFormLink", "type": "object"}, "OutputPortalFormLinks": {"properties": {"subtenant_id": {"title": "Subtenant Id", "type": "string"}, "forms": {"items": {"$ref": "#/components/schemas/OutputPortalFormLink"}, "title": "Forms", "type": "array"}}, "required": ["subtenant_id", "forms"], "title": "OutputPortalFormLinks", "type": "object"}, "PortalFormSubmissionsSchema": {"description": "One published portal form's submissions as the client-side datatable payload, scoped to\nPORTAL + this link. Adds the link id (element-id namespacing inside the Portal-forms accordion,\nwhere several of these datatables coexist) and the form name.", "properties": {"columns": {"items": {"additionalProperties": true, "type": "object"}, "title": "Columns", "type": "array"}, "dynamic_columns": {"items": {"additionalProperties": true, "type": "object"}, "title": "Dynamic Columns", "type": "array"}, "submissions": {"items": {"additionalProperties": true, "type": "object"}, "title": "Submissions", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}, "export_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Export Url"}, "link_id": {"title": "Link Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}}, "required": ["columns", "dynamic_columns", "submissions", "link_id", "form_name"], "title": "PortalFormSubmissionsSchema", "type": "object"}, "AttachPortalForm": {"properties": {"custom_form_id": {"title": "Custom Form Id", "type": "string"}, "display_order": {"default": 0, "title": "Display Order", "type": "integer"}, "show_description": {"default": false, "title": "Show Description", "type": "boolean"}}, "required": ["custom_form_id"], "title": "AttachPortalForm", "type": "object"}, "OutputPartnerPortalFormLink": {"description": "One form published to a partner bridge (management view).", "properties": {"id": {"title": "Id", "type": "string"}, "form_id": {"title": "Form Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}, "display_order": {"default": 0, "title": "Display Order", "type": "integer"}, "has_active_version": {"default": false, "title": "Has Active Version", "type": "boolean"}, "active_version": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Active Version"}, "submission_count": {"default": 0, "title": "Submission Count", "type": "integer"}}, "required": ["id", "form_id", "form_name"], "title": "OutputPartnerPortalFormLink", "type": "object"}, "OutputPartnerPortalFormLinks": {"properties": {"bridge_id": {"title": "Bridge Id", "type": "string"}, "forms": {"items": {"$ref": "#/components/schemas/OutputPartnerPortalFormLink"}, "title": "Forms", "type": "array"}}, "required": ["bridge_id", "forms"], "title": "OutputPartnerPortalFormLinks", "type": "object"}, "PartnerFormSubmissionsSchema": {"description": "One published partner form's submissions as the client-side datatable payload, scoped to\nPARTNER_PORTAL + this link. Adds the link id (for element-id namespacing inside the FORMS-tab\naccordion, where several of these datatables coexist) and the form name.", "properties": {"columns": {"items": {"additionalProperties": true, "type": "object"}, "title": "Columns", "type": "array"}, "dynamic_columns": {"items": {"additionalProperties": true, "type": "object"}, "title": "Dynamic Columns", "type": "array"}, "submissions": {"items": {"additionalProperties": true, "type": "object"}, "title": "Submissions", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}, "export_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Export Url"}, "link_id": {"title": "Link Id", "type": "string"}, "form_name": {"title": "Form Name", "type": "string"}}, "required": ["columns", "dynamic_columns", "submissions", "link_id", "form_name"], "title": "PartnerFormSubmissionsSchema", "type": "object"}, "AttachPartnerPortalForm": {"properties": {"custom_form_id": {"title": "Custom Form Id", "type": "string"}, "display_order": {"default": 0, "title": "Display Order", "type": "integer"}}, "required": ["custom_form_id"], "title": "AttachPartnerPortalForm", "type": "object"}, "OutputDocumentTemplate": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "entity_type": {"title": "Entity Type", "type": "string"}, "entity_type_display": {"title": "Entity Type Display", "type": "string"}, "default_series": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Series"}, "default_series_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Series Code"}, "retention_days": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Retention Days"}, "data_classification": {"title": "Data Classification", "type": "string"}, "is_active": {"title": "Is Active", "type": "boolean"}}, "required": ["id", "name", "entity_type", "entity_type_display", "data_classification", "is_active"], "title": "OutputDocumentTemplate", "type": "object"}, "OutputDocumentTemplates": {"properties": {"document_templates": {"items": {"$ref": "#/components/schemas/OutputDocumentTemplate"}, "title": "Document Templates", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}}, "required": ["document_templates"], "title": "OutputDocumentTemplates", "type": "object"}, "AddDocumentTemplate": {"properties": {"name": {"maxLength": 200, "minLength": 2, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "entity_type": {"default": "general", "title": "Entity Type", "type": "string"}, "body": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Body"}, "default_series_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Series Id"}, "retention_days": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Retention Days"}, "data_classification": {"default": "internal", "enum": ["internal", "confidential", "personal_data"], "title": "Data Classification", "type": "string"}, "is_active": {"default": true, "title": "Is Active", "type": "boolean"}}, "required": ["name"], "title": "AddDocumentTemplate", "type": "object"}, "EditDocumentTemplate": {"properties": {"name": {"anyOf": [{"maxLength": 200, "minLength": 2, "type": "string"}, {"type": "null"}], "title": "Name"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "entity_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Entity Type"}, "body": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Body"}, "default_series_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Default Series Id"}, "retention_days": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Retention Days"}, "data_classification": {"anyOf": [{"enum": ["internal", "confidential", "personal_data"], "type": "string"}, {"type": "null"}], "title": "Data Classification"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "title": "EditDocumentTemplate", "type": "object"}, "OutputDocumentSeries": {"properties": {"id": {"title": "Id", "type": "string"}, "code": {"title": "Code", "type": "string"}, "name": {"title": "Name", "type": "string"}, "next_number": {"title": "Next Number", "type": "integer"}, "next_full_number": {"title": "Next Full Number", "type": "string"}, "padding": {"title": "Padding", "type": "integer"}, "is_active": {"title": "Is Active", "type": "boolean"}, "document_count": {"default": 0, "title": "Document Count", "type": "integer"}}, "required": ["id", "code", "name", "next_number", "next_full_number", "padding", "is_active"], "title": "OutputDocumentSeries", "type": "object"}, "OutputDocumentSeriesList": {"properties": {"document_series": {"items": {"$ref": "#/components/schemas/OutputDocumentSeries"}, "title": "Document Series", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}}, "required": ["document_series"], "title": "OutputDocumentSeriesList", "type": "object"}, "AddDocumentSeries": {"properties": {"code": {"maxLength": 20, "minLength": 1, "title": "Code", "type": "string"}, "name": {"maxLength": 100, "minLength": 1, "title": "Name", "type": "string"}, "next_number": {"default": 1, "minimum": 1, "title": "Next Number", "type": "integer"}, "padding": {"default": 0, "maximum": 8, "minimum": 0, "title": "Padding", "type": "integer"}, "lock_on_finalize": {"default": false, "title": "Lock On Finalize", "type": "boolean"}, "is_active": {"default": true, "title": "Is Active", "type": "boolean"}}, "required": ["code", "name"], "title": "AddDocumentSeries", "type": "object"}, "EditDocumentSeries": {"properties": {"code": {"anyOf": [{"maxLength": 20, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Code"}, "name": {"anyOf": [{"maxLength": 100, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Name"}, "next_number": {"anyOf": [{"minimum": 1, "type": "integer"}, {"type": "null"}], "title": "Next Number"}, "padding": {"anyOf": [{"maximum": 8, "minimum": 0, "type": "integer"}, {"type": "null"}], "title": "Padding"}, "lock_on_finalize": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Lock On Finalize"}, "is_active": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Active"}}, "title": "EditDocumentSeries", "type": "object"}, "GenerateDocument": {"properties": {"template_id": {"title": "Template Id", "type": "string"}, "title": {"anyOf": [{"maxLength": 255, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Title"}, "body": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Body"}, "data_classification": {"anyOf": [{"enum": ["internal", "confidential", "personal_data"], "type": "string"}, {"type": "null"}], "title": "Data Classification"}}, "required": ["template_id"], "title": "GenerateDocument", "type": "object"}, "EditDocument": {"properties": {"title": {"anyOf": [{"maxLength": 255, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Title"}, "body": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Body"}, "data_classification": {"anyOf": [{"enum": ["internal", "confidential", "personal_data"], "type": "string"}, {"type": "null"}], "title": "Data Classification"}}, "title": "EditDocument", "type": "object"}, "FinalizeDocument": {"properties": {"series_id": {"title": "Series Id", "type": "string"}}, "required": ["series_id"], "title": "FinalizeDocument", "type": "object"}, "OutputDocument": {"properties": {"id": {"title": "Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "status": {"title": "Status", "type": "string"}, "locked": {"default": false, "title": "Locked", "type": "boolean"}, "full_number": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Full Number"}, "series": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Series"}, "series_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Series Code"}, "template": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Template"}, "template_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Template Name"}, "context_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Context Type"}, "context_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Context Id"}, "context_label": {"default": "", "title": "Context Label", "type": "string"}, "render_route": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Render Route"}, "page_route": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Page Route"}, "org_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Org Id"}, "org_label": {"default": "", "title": "Org Label", "type": "string"}, "data_classification": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Data Classification"}, "finalized_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Finalized At"}, "retain_until": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Retain Until"}, "created_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Created At"}}, "required": ["id", "title", "status"], "title": "OutputDocument", "type": "object"}, "OutputDocuments": {"properties": {"documents": {"items": {"$ref": "#/components/schemas/OutputDocument"}, "title": "Documents", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}, "is_filtered": {"default": false, "title": "Is Filtered", "type": "boolean"}, "entity_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Entity Id"}}, "required": ["documents"], "title": "OutputDocuments", "type": "object"}, "OutputShare": {"properties": {"id": {"title": "Id", "type": "string"}, "org_id": {"title": "Org Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "message": {"title": "Message", "type": "string"}, "language": {"title": "Language", "type": "string"}, "state": {"enum": ["draft", "published", "unpublished", "expired"], "title": "State", "type": "string"}, "expires_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Expires At"}, "published_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Published At"}, "first_published_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "First Published At"}, "has_link": {"default": false, "title": "Has Link", "type": "boolean"}, "last_opened_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Opened At"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Created By"}, "proposal_count": {"default": 0, "title": "Proposal Count", "type": "integer"}, "document_count": {"default": 0, "title": "Document Count", "type": "integer"}, "file_count": {"default": 0, "title": "File Count", "type": "integer"}, "pending_count": {"default": 0, "title": "Pending Count", "type": "integer"}}, "required": ["id", "org_id", "title", "message", "language", "state", "created_at"], "title": "OutputShare", "type": "object"}, "OutputShares": {"properties": {"org_id": {"title": "Org Id", "type": "string"}, "shares": {"items": {"$ref": "#/components/schemas/OutputShare"}, "title": "Shares", "type": "array"}, "total_count": {"default": 0, "title": "Total Count", "type": "integer"}, "has_portal_contacts": {"default": false, "title": "Has Portal Contacts", "type": "boolean"}}, "required": ["org_id", "shares"], "title": "OutputShares", "type": "object"}, "AddShare": {"description": "A new share starts as a draft. The message is plain text. The language defaults from the\norganization's country; it is one of the platform's languages, such as `en` or `ro`.", "properties": {"title": {"maxLength": 200, "minLength": 1, "title": "Title", "type": "string"}, "message": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Message"}, "language": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Language"}}, "required": ["title"], "title": "AddShare", "type": "object"}, "EditShare": {"description": "Partial: an omitted key keeps the stored value.", "properties": {"title": {"anyOf": [{"maxLength": 200, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Title"}, "message": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Message"}, "language": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Language"}}, "title": "EditShare", "type": "object"}, "PublishShare": {"description": "Publishes the share and every item waiting in it. The expiry is the end of the day, in the\norganization's timezone, `expires_in_days` from now; `no_expiry` overrides it. With neither, the\nshare keeps the expiry an earlier publication chose while it is still ahead, or gets the default.", "properties": {"expires_in_days": {"anyOf": [{"maximum": 366, "minimum": 1, "type": "integer"}, {"type": "null"}], "title": "Expires In Days"}, "no_expiry": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "No Expiry"}, "confirm_link_retirement": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Confirm Link Retirement"}, "replace_link": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Replace Link"}}, "title": "PublishShare", "type": "object"}, "OutputShareProposal": {"properties": {"id": {"title": "Id", "type": "string"}, "proposal_id": {"title": "Proposal Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "state": {"enum": ["current", "updated", "revising", "accepted", "lost", "gone"], "title": "State", "type": "string"}, "sent_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Sent At"}, "proposal_sent_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Proposal Sent At"}, "published": {"default": false, "title": "Published", "type": "boolean"}, "added_at": {"format": "date-time", "title": "Added At", "type": "string"}, "added_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Added By"}}, "required": ["id", "proposal_id", "name", "state", "added_at"], "title": "OutputShareProposal", "type": "object"}, "OutputShareProposals": {"properties": {"share_id": {"title": "Share Id", "type": "string"}, "share_open": {"title": "Share Open", "type": "boolean"}, "items": {"items": {"$ref": "#/components/schemas/OutputShareProposal"}, "title": "Items", "type": "array"}}, "required": ["share_id", "share_open", "items"], "title": "OutputShareProposals", "type": "object"}, "AddShareProposal": {"properties": {"proposal_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Proposal Id", "type": "string"}}, "required": ["proposal_id"], "title": "AddShareProposal", "type": "object"}, "OutputShareDocument": {"properties": {"id": {"title": "Id", "type": "string"}, "document_id": {"title": "Document Id", "type": "string"}, "title": {"title": "Title", "type": "string"}, "page_route": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Page Route"}, "updated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Updated At"}, "full_number": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Full Number"}, "state": {"enum": ["current", "changed", "gone"], "title": "State", "type": "string"}, "published": {"default": false, "title": "Published", "type": "boolean"}, "added_at": {"format": "date-time", "title": "Added At", "type": "string"}, "added_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Added By"}}, "required": ["id", "document_id", "title", "state", "added_at"], "title": "OutputShareDocument", "type": "object"}, "OutputShareDocuments": {"properties": {"share_id": {"title": "Share Id", "type": "string"}, "share_open": {"title": "Share Open", "type": "boolean"}, "items": {"items": {"$ref": "#/components/schemas/OutputShareDocument"}, "title": "Items", "type": "array"}}, "required": ["share_id", "share_open", "items"], "title": "OutputShareDocuments", "type": "object"}, "AddShareDocument": {"properties": {"document_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Document Id", "type": "string"}}, "required": ["document_id"], "title": "AddShareDocument", "type": "object"}, "OutputShareFile": {"properties": {"id": {"title": "Id", "type": "string"}, "entity_type": {"enum": ["org", "proposal"], "title": "Entity Type", "type": "string"}, "entity_id": {"title": "Entity Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "size": {"title": "Size", "type": "integer"}, "content_type": {"default": "", "title": "Content Type", "type": "string"}, "state": {"enum": ["current", "replaced", "gone"], "title": "State", "type": "string"}, "published": {"default": false, "title": "Published", "type": "boolean"}, "added_at": {"format": "date-time", "title": "Added At", "type": "string"}, "added_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Added By"}}, "required": ["id", "entity_type", "entity_id", "name", "size", "state", "added_at"], "title": "OutputShareFile", "type": "object"}, "OutputShareFiles": {"properties": {"share_id": {"title": "Share Id", "type": "string"}, "share_open": {"title": "Share Open", "type": "boolean"}, "items": {"items": {"$ref": "#/components/schemas/OutputShareFile"}, "title": "Items", "type": "array"}}, "required": ["share_id", "share_open", "items"], "title": "OutputShareFiles", "type": "object"}, "AddShareOrgFile": {"description": "`generation` is the storage generation the file list showed, so a file replaced since then\nis refused instead of shared unseen.", "properties": {"name": {"maxLength": 255, "minLength": 1, "title": "Name", "type": "string"}, "generation": {"minimum": 1, "title": "Generation", "type": "integer"}}, "required": ["name", "generation"], "title": "AddShareOrgFile", "type": "object"}, "AddShareProposalFile": {"properties": {"proposal_id": {"maxLength": 32, "minLength": 32, "pattern": "^[a-f0-9]+$", "title": "Proposal Id", "type": "string"}, "name": {"maxLength": 255, "minLength": 1, "title": "Name", "type": "string"}, "generation": {"minimum": 1, "title": "Generation", "type": "integer"}}, "required": ["proposal_id", "name", "generation"], "title": "AddShareProposalFile", "type": "object"}, "OutputShareAccess": {"properties": {"kind": {"title": "Kind", "type": "string"}, "channel": {"title": "Channel", "type": "string"}, "item_type": {"default": "", "title": "Item Type", "type": "string"}, "item_label": {"default": "", "title": "Item Label", "type": "string"}, "who": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Who"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["kind", "channel", "created_at"], "title": "OutputShareAccess", "type": "object"}, "OutputShareAccesses": {"properties": {"share_id": {"title": "Share Id", "type": "string"}, "next_page": {"title": "Next Page", "type": "integer"}, "accesses": {"items": {"$ref": "#/components/schemas/OutputShareAccess"}, "title": "Accesses", "type": "array"}}, "required": ["share_id", "next_page", "accesses"], "title": "OutputShareAccesses", "type": "object"}}, "securitySchemes": {"XSessionTokenAuth": {"type": "apiKey"}, "AuthBearer": {"type": "http", "scheme": "bearer"}, "SessionAuth": {"type": "apiKey", "in": "cookie", "name": "sessionid"}}}, "servers": []}