openapi: 3.2.0 info: version: 0.48.24 termsOfService: https://www.decisiv.com/terms-of-use contact: name: Decisiv Support email: support@decisiv.com url: https://www.decisiv.com title: Service Management Case Line Items Relationships Assignee API description: The **Decisiv SRM Gateway** `Service Management` module provides the API functionality for managing an asset's case lifecycle from a Service Providers perspective. license: name: Proprietary identifier: proprietary url: https://www.decisiv.com/terms-of-use/ servers: - url: https://srm-api.staging.decisivapps.com - url: https://srm-api.decisivapps.com security: - OAuth2AuthorizationCode: [] AccessToken: [] - OAuth2Password: [] AccessToken: [] tags: - name: Case Line Items Relationships Assignee paths: /service_management/{srm_account_id}/v1/cases/{case_id}/line_items/{line_item_id}/relationships/assignee: patch: summary: Update an assignee from line item tags: - Case Line Items Relationships Assignee parameters: - name: srm_account_id in: path description: The account ID for SRM required: true schema: type: string - name: case_id in: path schema: type: string format: uuid description: The case UUID required: true - name: line_item_id in: path schema: type: string format: uuid description: The line item UUID required: true responses: '200': description: Show details for changed Line Item content: application/vnd.api+json: example: data: id: ba889598-5f26-4481-90f7-2c172d42ca5f type: line_items attributes: complaint: null cause: null correction: null opcode: T3789-0-04 price_code: null name: All Engines All Years All Models All Makes for Air Dryer Cartridge, Replacement description: null labor: time: 2 skill_level: A pricing: estimated_total: '300.00' fixed_total: null labor: estimated_total: '140.00' fixed_total: null parts: estimated_total: '140.00' core_price: estimated_total: '20.00' additional_charges: estimated_total: '450.0' vmrs: component: code_key: '33' code: 023-000-000 internal_label: approved relationships: parts: data: - type: line_item_parts id: 167f089e-339d-4d05-b175-9b10206c3cbf technician_stories: data: - type: technician_stories id: b2610b45-a2e1-4abf-ad21-7f820bca4923 assignee: data: type: internal_users id: 6383dc89-05b6-4572-8979-a6257f3597ec schema: $ref: '#/components/schemas/line_item' '400': description: This response may occur when an invalid request has been provided to the server. The request may be corrected by the consumer and resubmitted. content: application/vnd.api+json: example: errors: - title: Filter not allowed detail: '''{{filter_name}}'' is not allowed. Valid filters: {{filters_list}}' code: decisiv:filters:001 status: '400' source: parameter: filter[filter_name] schema: $ref: '#/components/schemas/errors_response' '401': description: This response may occur when the access token provided within the Authorization token has expired. content: application/vnd.api+json: example: errors: - title: Access unauthorized detail: Access unauthorized code: decisiv::access_token:001 status: '401' schema: $ref: '#/components/schemas/errors_response' '403': description: This response may occur when the authenticated user embedded within the Authorization header does not have access to the requested resource. content: application/vnd.api+json: example: errors: - title: Forbidden detail: User does not have permission to perform this action on the requested resource(s) code: decisiv:access:001 status: '403' schema: $ref: '#/components/schemas/errors_response' '404': description: This response may occur when the requested resource is not found. content: application/vnd.api+json: example: errors: - title: Record not found detail: The requested record or one of its relationships could not be found code: '404' status: '404' schema: $ref: '#/components/schemas/errors_response' '422': description: User does not have the underlying permission content: application/vnd.api+json: example: errors: - status: '422' code: decisiv:permissions:001 title: Missing Permission detail: Provided resource does not have the required permission to complete the request. schema: $ref: '#/components/schemas/errors_response' '424': description: This response may occur when there is an unresolved data dependency or configuration required inside of the Decisiv Platform preventing access to the requested action. content: application/vnd.api+json: example: errors: - title: Failed Dependency detail: Failed Dependency code: '424' status: '424' schema: $ref: '#/components/schemas/errors_response' '504': description: This response may occur when there is an unexpected system timeout. content: application/vnd.api+json: example: errors: - code: '504' detail: Gateway timeout error status: '504' title: Gateway timeout error schema: $ref: '#/components/schemas/errors_response' requestBody: content: application/vnd.api+json: schema: oneOf: - $ref: '#/components/schemas/assignee_change' examples: Change Assignee: value: data: type: internal_users id: 6383dc89-05b6-4572-8979-a6257f3597ec components: schemas: assignee_change: type: object required: - data properties: data: type: object properties: type: type: string id: type: string line_item: type: object required: - data properties: data: type: object description: 'A line_item represents a single operation (complaint/cause/correction) on the case. ' properties: id: type: string format: uuid type: type: string enum: - line_items attributes: type: object properties: complaint: type: - string - 'null' description: Customer-reported issue that originated the operation. maxLength: 6000 cause: type: - string - 'null' description: Diagnosed cause of the issue. maxLength: 6000 correction: type: - string - 'null' description: Repair action performed (or to be performed) to address the cause. maxLength: 6000 internal_label: type: - string - 'null' description: Workflow status of the line item. Values are configurable per account — see `GET /line_item_internal_labels` for the accepted values. `none` is always accepted and represents "no label". maxLength: 255 example: approved description: type: - string - 'null' description: Free-form notes on the operation, distinct from `complaint` / `cause` / `correction`. maxLength: 6000 price_code: type: - string - 'null' description: Dealer-defined identifier of a pricing tier used to look up custom labor and parts rates for the line item. maxLength: 255 approval_group_tag: type: - string - 'null' description: Free-form tag used to group line items together for approval workflows. maxLength: 255 example: GROUP-A billing_classification: type: - string - 'null' description: How the operation is billed, derived from the operation type. `billable` is the default (no special operation type); the remaining values indicate the operation is not directly billed to the customer. enum: - billable - warranty - policy - campaign - recall example: billable under_warranty: type: boolean description: Whether the operation is classified as warranty work (a convenience flag derived from `billing_classification` / the operation type). example: false labor: type: object description: Labor inputs for the operation — estimated hours (`time`) and the technician tier (`skill_level`) whose rate drives the calculated labor price in `pricing.labor`. properties: time: type: - number - 'null' description: Labor hours required for the operation. example: 2 skill_level: type: - string - 'null' description: Labor skill level applied to the operation. Values are configurable per account — see `GET /skill_levels` for the accepted values. example: C paint: type: object description: Paint inputs for the operation — estimated hours (`time`), hourly `rate`, calculated `total`, and the technician tier (`skill_level`). properties: time: type: - number - 'null' description: Paint hours required for the operation. example: 1.5 rate: type: - number - 'null' description: Hourly paint labor rate applied to the operation. example: 95 total: type: - number - 'null' description: Calculated paint total (time × rate). example: 142.5 skill_level: type: - string - 'null' description: Paint skill level applied to the operation. example: P1 name: type: - string - 'null' description: Human-readable name of the operation performed (e.g. `Air Dryer Cartridge, Replacement`), distinct from `opcode` which is the short identifier. maxLength: 510 example: Air Dryer Cartridge, Replacement opcode: type: string description: Short identifier for the operation (e.g. `T3789-0-04`), drawn from the operation catalog or set on a custom operation. The serializer falls back through DMS-mapped opcode, source-system opcode, then the catalog opcode. maxLength: 255 example: T3789-0-04 work_status: type: - object - 'null' description: The current work-status transition for the line item (its most recent status history record). Null when the operation has no work status yet. properties: code: type: string description: The work-status transition code. enum: - start - stop - complete - reopen example: start reason: type: - string - 'null' description: Standardized reason for the transition (primarily for `stop`). Null when the transition has no reason. enum: - break - meal - shift_change - reassigned - sick - injured - awaiting_approval - awaiting_parts - awaiting_tools - awaiting_tech_support - user_defined_1 - user_defined_2 - user_defined_3 - user_defined_4 - null example: awaiting_parts timestamp: type: - string - 'null' format: date-time description: When the transition occurred (ISO 8601). set_by_user: type: - object - 'null' description: The user the work status is attributed to. properties: id: type: - string - 'null' description: The user's identifier. name: type: - string - 'null' description: The user's full name. approval_status: type: - object - 'null' description: The metadata-backed approval status for the line item. Null when no approval has been recorded. properties: name: type: string description: The approval status. enum: - requested - approved - declined - deferred example: approved reason: type: - string - 'null' description: Reason associated with the approval decision. reason_description: type: - string - 'null' description: Free-form description of the approval reason. reviewed_by: type: - object - 'null' description: The user who set the approval status. properties: id: type: - string - 'null' description: The reviewing user's identifier. name: type: - string - 'null' description: The reviewing user's full name. reviewed_at: type: - string - 'null' format: date-time description: When the approval status was last updated (ISO 8601). pricing: type: object description: Server-computed pricing breakdown — top-level totals plus per-category sub-totals for `labor`, `parts`, `core_price`, and `additional_charges`. The top-level object and `labor` expose `fixed_total` for flat-rate operations; the other sub-totals expose `estimated_total` only. properties: estimated_total: type: - string - 'null' format: decimal description: Estimated total for the line item, dynamically calculated from labor time, parts, and additional charges. Null when the line item is fixed-price. example: '330.00' fixed_total: type: - string - 'null' format: decimal description: Fixed total for the line item — a flat-rate price tied to a fixed-price opcode, not dynamically calculated. Null when the line item is estimated. example: '425.00' labor: type: object properties: estimated_total: type: - string - 'null' format: decimal description: Estimated labor price, calculated from labor time. Null when labor is fixed-price. example: '140.00' fixed_total: type: - string - 'null' format: decimal description: Fixed labor price for fixed-price labor, not dynamically calculated. Null when labor is estimated. example: '180.00' parts: type: object properties: estimated_total: type: string format: decimal description: Estimated total for parts, calculated from the parts list. example: '140.00' additional_charges: type: object properties: estimated_total: type: string format: decimal description: Sum of additional charges on the line item. example: '50.00' core_price: type: object properties: estimated_total: type: string format: decimal description: Estimated total for core charges on the parts list. vmrs: type: object description: 'Vehicle Maintenance Reporting Standards (VMRS) coding for the line item, exposing six VMRS code categories: reason for repair (CK14), operator report (CK82), component code (CK33), position (CK79), technician failure (CK18), and work accomplished (CK15). Each section is null when no code of that category is assigned.' properties: reason_for_repair: type: - object - 'null' description: Identifies what caused an asset to come in for repair properties: code_key: type: string description: VMRS code key — the category bucket within the ATA Vehicle Maintenance Reporting Standards (e.g. `14` Reason for Repair, `33` Component, `15` Work Accomplished). example: '14' code: type: string description: The VMRS code value selected within the parent `code_key`; meaning is scoped to that category. example: '01' operator_report: type: - array - 'null' description: Identifies what the operator reports as being the issue items: type: object properties: code_key: type: string description: VMRS code key — the category bucket within the ATA Vehicle Maintenance Reporting Standards (e.g. `14` Reason for Repair, `33` Component, `15` Work Accomplished). example: '82' code: type: string description: The VMRS code value selected within the parent `code_key`; meaning is scoped to that category. example: '001' component: type: - object - 'null' description: Provides universal identifiers or generic terms for parts properties: code_key: type: string description: VMRS code key — the category bucket within the ATA Vehicle Maintenance Reporting Standards (e.g. `14` Reason for Repair, `33` Component, `15` Work Accomplished). example: '33' code: type: string description: The VMRS code value selected within the parent `code_key`; meaning is scoped to that category. example: 023-000-000 position: type: - object - 'null' description: Identifies position based on industry-accepted conventions properties: code_key: type: string description: VMRS code key — the category bucket within the ATA Vehicle Maintenance Reporting Standards (e.g. `14` Reason for Repair, `33` Component, `15` Work Accomplished). example: '79' code: type: string description: The VMRS code value selected within the parent `code_key`; meaning is scoped to that category. example: '03' technician_failure: type: - object - 'null' description: Identifies the technical failure diagnosed by the technician properties: code_key: type: string description: VMRS code key — the category bucket within the ATA Vehicle Maintenance Reporting Standards (e.g. `14` Reason for Repair, `33` Component, `15` Work Accomplished). example: '18' code: type: string description: The VMRS code value selected within the parent `code_key`; meaning is scoped to that category. example: B1 work_accomplished: type: - object - 'null' description: Identifies the repair action the technician performed properties: code_key: type: string description: VMRS code key — the category bucket within the ATA Vehicle Maintenance Reporting Standards (e.g. `14` Reason for Repair, `33` Component, `15` Work Accomplished). example: '15' code: type: string description: The VMRS code value selected within the parent `code_key`; meaning is scoped to that category. example: A relationships: type: object properties: parts: description: Parts consumed or quoted on this line item, each contributing to `pricing.parts.estimated_total`. Returned as a JSON:API to-many relationship; expand via `include=parts`. $ref: '#/components/schemas/relationship_objects' technician_stories: description: Technician-authored notes attached to this line item, capturing the diagnostic narrative around the complaint/cause/correction. To-many; expand via `include=technician_stories`. $ref: '#/components/schemas/relationship_objects' assignee: description: The user assigned to perform the operation on this line item. To-one; expand via `include=assignee`. $ref: '#/components/schemas/relationship_object' case: description: The case (estimate) this line item belongs to. To-one; only present when expanded via `include=case` (used by the account-wide `GET /line_items` collection). $ref: '#/components/schemas/relationship_object' required: - attributes - type - id error_response: type: object properties: status: type: string title: type: string detail: type: - string - 'null' code: type: - string - 'null' source: type: object properties: parameter: type: - string - 'null' pointer: type: - string - 'null' links: type: object description: Links related to this error (e.g. documentation reference). additionalProperties: type: string format: uri required: - status - title relationship_objects: type: object properties: data: type: array items: type: - object - 'null' properties: id: type: string type: type: string required: - id - type required: - data relationship_object: type: object properties: data: type: - object - 'null' properties: id: type: string type: type: string required: - id - type required: - data errors_response: type: object properties: errors: type: array items: $ref: '#/components/schemas/error_response' required: - errors securitySchemes: AccessToken: type: http scheme: bearer bearerFormat: JWT OAuth2AuthorizationCode: type: oauth2 description: OAuth 2.0 Authorization Code flow. This is the required flow for new integrations. See https://api-docs.decisiv.net/docs/api/oauth/ flows: authorizationCode: authorizationUrl: https://login.decisiv.net/auth/api_gateway tokenUrl: https://login.decisiv.net/oauth/token refreshUrl: https://login.decisiv.net/oauth/token scopes: {} OAuth2Password: type: oauth2 description: '**Deprecated.** OAuth 2.0 Password flow. New integrations must use the Authorization Code flow (`OAuth2AuthorizationCode`); this flow remains available only during the migration window and will be removed in a future release. See https://api-docs.decisiv.net/docs/api/oauth/' flows: password: tokenUrl: https://login.decisiv.net/oauth/token scopes: {}