Decisiv SRM Gateway - Service Management

The service-provider view of the SRM Gateway and the largest module. Cases and case actions, customers and customer assets, customer requests, line items with parts, additional charges, technician stories and internal labels, case metadata, time tasks, skill levels, departments, program types, repair statuses, service networks, sublet cases / requests / associations between shops, diagnostic readings, faults, and VMRS.

OpenAPI Specification

decisiv-service-management-openapi.yml Raw ↑
openapi: 3.1.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
  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: []
paths:
  /service_management/{srm_account_id}/v1/cases:
    get:
      summary: List cases for the requested account
      operationId: listCases
      description: 'Returns a paginated list of cases for the requested SRM account. Supports filtering by service provider,
        customer asset, customer, repair status, repair order number, and event timestamps.

        '
      tags:
      - Cases
      parameters:
      - name: srm_account_id
        in: path
        description: The account ID for SRM
        required: true
        schema:
          type: string
      - name: filter[service_provider.external_reference.srm_account]
        in: query
        required: false
        schema:
          type: string
        description: Filter cases by the service provider's SRM account ID.
      - name: filter[customer_asset.id]
        in: query
        required: false
        schema:
          type: string
          format: uuid
        description: Filter cases matching the exact `customer_asset.id`.
      - name: filter[customer_asset.vin]
        in: query
        required: false
        schema:
          type: string
          minLength: 17
          maxLength: 17
        description: Filter cases matching the exact `customer_asset.vin`. Must be exactly 17 characters.
      - name: filter[customer_asset.serial_number]
        in: query
        required: false
        schema:
          type: string
          minLength: 6
          maxLength: 17
        description: Filter cases matching the exact `customer_asset.serial_number`. Must be between 6 and 17 characters.
      - name: filter[ro_number]
        in: query
        required: false
        schema:
          type: string
          maxLength: 40
        description: Filter cases matching the exact repair order number.
      - name: filter[reference_number]
        in: query
        required: false
        schema:
          type: integer
        description: Filter cases matching the exact case reference number.
      - name: filter[repair_status:include]
        in: query
        required: false
        deprecated: true
        schema:
          type: string
        description: '**Deprecated** — use `filter[repair_status:includes]` instead. Filter cases to only those matching the
          specified repair status(es). Accepts a comma-separated list of up to 50 statuses. See the `repair_status` endpoint
          for available values.'
      - name: filter[repair_status:exclude]
        in: query
        required: false
        deprecated: true
        schema:
          type: string
        description: '**Deprecated** — use `filter[repair_status:excludes]` instead. Filter cases to exclude those matching
          the specified repair status(es). Accepts a comma-separated list of up to 50 statuses. See the `repair_status` endpoint
          for available values.'
      - name: filter[repair_status:includes]
        in: query
        required: false
        schema:
          type: string
        description: Filter cases to only those matching the specified repair status(es). Accepts a comma-separated list of
          up to 50 statuses. See the `repair_status` endpoint for available values.
      - name: filter[repair_status:excludes]
        in: query
        required: false
        schema:
          type: string
        description: Filter cases to exclude those matching the specified repair status(es). Accepts a comma-separated list
          of up to 50 statuses. See the `repair_status` endpoint for available values.
      - name: filter[assignee.id]
        in: query
        required: false
        schema:
          type: string
          format: uuid
        description: Filter cases assigned to the user with the given assignee id (the id segment of the assignee's user URI).
      - name: filter[assignee.id:includes]
        in: query
        required: false
        schema:
          type: string
        description: Filter cases assigned to any of the given assignee ids. Accepts a comma-separated list of up to 50 ids.
      - name: filter[assignee.id:excludes]
        in: query
        required: false
        schema:
          type: string
        description: Filter cases excluding those assigned to any of the given assignee ids. Accepts a comma-separated list
          of up to 50 ids.
      - name: filter[event_timestamps.started_at:lt]
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Filter cases started _before_ the specified `ISO 8601` datetime.
      - name: filter[event_timestamps.started_at:lte]
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Filter cases started _on or before_ the specified `ISO 8601` datetime.
      - name: filter[event_timestamps.started_at:gt]
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Filter cases started _after_ the specified `ISO 8601` datetime.
      - name: filter[event_timestamps.started_at:gte]
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Filter cases started _on or after_ the specified `ISO 8601` datetime.
      - name: filter[event_timestamps.closed_at:exists]
        in: query
        required: false
        schema:
          type: boolean
        description: Filter cases by whether a `closed_at` timestamp exists. Use `true` to list only closed cases, or `false`
          to list only open cases.
      - name: filter[customer_asset.customer.id]
        in: query
        required: false
        schema:
          type: string
          format: uuid
        description: Filter cases matching the exact `customer_asset.customer.id`.
      - name: filter[customer.id]
        in: query
        required: false
        schema:
          type: string
          format: uuid
        description: Filter cases by the case's primary customer, matching the exact `customer.id` (the customer's UUID).
          Applies to both local (`customers`) and registered (`registered_customers`) customers.
      - name: filter[updated_at:gte]
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Filter cases last updated _on or after_ the specified `ISO 8601` datetime.
      - name: filter[updated_at:lte]
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Filter cases last updated _on or before_ the specified `ISO 8601` datetime.
      - name: page[number]
        in: query
        required: false
        schema:
          type: integer
          default: 1
          minimum: 1
        description: 'Sets the desired `page` when encountering larger result sets. The response `meta.metadata.record-count`
          may be `null` (intentionally not computed to avoid expensive COUNT queries on large datasets). Paginate until a
          page returns fewer items than `page[size]`.

          '
      - name: page[size]
        in: query
        required: false
        schema:
          type: integer
          default: 25
          minimum: 1
        description: 'Sets the desired maximum number of results per page. The response `meta.metadata.record-count` may be
          `null` (intentionally not computed to avoid expensive COUNT queries on large datasets). Paginate until a page returns
          fewer items than `page[size]`.

          '
      responses:
        '200':
          description: Returns list of cases
          content:
            application/vnd.api+json:
              example:
                data:
                - id: 487136d2-c4d6-424c-b018-f1ed8a740c6a
                  type: cases
                  attributes:
                    reference_number: 321098
                    complaint: CEL on
                    po_number: V2479-128
                    auth_number: DV793957
                    ro_number: U2112550
                    cause: Diagnostic check required
                    correction: Reset Diagnostics
                    asset_information:
                      odometer_value: 10000
                      odometer_unit: mi
                      engine_hours: 167
                      switch_on_hours: 10
                      stand_by_hours: 2
                    event_timestamps:
                      requested_appointment_time: '2025-10-10T13:30:41Z'
                      requested_completion_time: '2025-10-10T13:30:41Z'
                      followup_time: '2025-10-10T13:30:41Z'
                      closed_at: '2025-04-10T13:30:41Z'
                      asset_uptime: '2025-04-10T13:00:41Z'
                      actual_time_to_repair: '2025-04-10T13:10:41Z'
                      estimated_time_to_repair: '2025-04-10T13:15:41Z'
                      asset_checked_in: '2025-04-10T12:30:41Z'
                      started_at: '2025-04-10T12:00:41Z'
                      asset_arrived: '2025-04-10T11:30:41Z'
                      asset_downtime: '2025-04-10T10:30:41Z'
                      asset_departed_at: '2025-04-10T13:30:41Z'
                    breakdown:
                      location: Outside Seneca Lodge
                      city: Watkins Glen
                      state: NY
                    repair_status: appointment
                    invoice:
                      total: 3758.5
                      number: TR-91324
                      date: '2025-04-10'
                    pricing:
                      parts_total: 432.5
                      labor_total: 250
                      core_total: 75
                      tax: 32.18
                      haz_waste: 15
                    vmrs:
                      asset_type:
                        code_key: '2'
                        code: R
                      repair_priority:
                        code_key: '16'
                        code: '2'
                      repair_site:
                        code_key: '17'
                        code: '7'
                      reason_for_repair:
                        code_key: '14'
                        code: '01'
                      operator_report:
                      - code_key: '82'
                        code: '001'
                      - code_key: '82'
                        code: '002'
                      component:
                        code_key: '33'
                        code: 023-000-000
                      position:
                        code_key: '79'
                        code: '03'
                      technician_failure:
                        code_key: '18'
                        code: B1
                      work_accomplished:
                        code_key: '15'
                        code: A
                    tag_number: null
                  links:
                    self: https://srm-api.decisivapps.com/service_management/{srm_account_id}/v1/cases/487136d2-c4d6-424c-b018-f1ed8a740c6a
                  relationships:
                    customer_asset:
                      data:
                        type: customer_assets
                        id: aa3e7935-bfe2-475e-9be2-80ccef5477c8
                    customer:
                      data:
                        type: customers
                        id: 9b1f3c52-7e44-4a8d-9c2f-1d6e0a2b4c8e
                    billing_contact:
                      data:
                        type: registered_customers
                        id: 7da042d2-c47b-4748-ba65-c114adf1cf62
                    billing_customer:
                      data:
                        type: registered_customers
                        id: 014ee85e-a183-4bf7-b4d7-67e758fa2b2a
                    shipping_customer:
                      data:
                        type: customers
                        id: 11028a0c-1a4b-42c7-86ff-16343fb546a0
                    service_provider:
                      data:
                        type: service_providers
                        id: 65b8d7f1-77aa-4b62-9a62-7207da98bb94
                    program_type:
                      data:
                        type: program_types
                        id: b7390546-9a28-4aed-9e30-1a5afc0ab696
                    primary_contact:
                      data:
                        type: recipients
                        id: 462d54f5-a1a1-48b5-ac0f-2068259105df
                    driver:
                      data:
                        type: recipients
                        id: bd763ee6-b2f2-49fc-a375-7fb5346ee19d
                    assignee:
                      data:
                        type: internal_users
                        id: 6383dc89-05b6-4572-8979-a6257f3597ec
                    department:
                      data:
                        type: departments
                        id: department_code
              schema:
                $ref: '#/components/schemas/cases'
        '400':
          description: The request contains invalid parameters and may be corrected by the consumer and resubmitted.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_response'
              examples:
                Filter not allowed:
                  value:
                    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]
                Invalid filter value:
                  value:
                    errors:
                    - title: Invalid filter value
                      detail: '''{{invalid_value}}'' is not a valid value. Valid values: {{valid_values}}'
                      code: decisiv:filters:002
                      status: '400'
                      source:
                        parameter: filter[repair_status:include]
                Date range exceeded:
                  value:
                    errors:
                    - title: Filter validation failed
                      detail: Date range must not exceed 180 days
                      code: decisiv:filters:004
                      status: '400'
                Minimum character length not met:
                  value:
                    errors:
                    - title: Minimum character length not met
                      detail: Filter value must be at least {{minimum_length}} characters
                      code: decisiv:filters:007
                      status: '400'
                      source:
                        parameter: filter[filter_name]
                Maximum character length exceeded:
                  value:
                    errors:
                    - title: Maximum character length not met
                      detail: Filter value must be less than {{maximum_length}} characters
                      code: decisiv:filters:008
                      status: '400'
                      source:
                        parameter: filter[filter_name]
                Invalid filter format:
                  value:
                    errors:
                    - title: Invalid filter format
                      detail: '''{{invalid_filter}}'' is not a valid filter format'
                      code: decisiv:filters:009
                      status: '400'
                      source:
                        parameter: filter[customer_asset.id]
                Too many filter values:
                  value:
                    errors:
                    - title: Too many filter values
                      detail: 'Too many values for filter[repair_status:include]. Maximum allowed: 50.'
                      code: decisiv:filters:011
                      status: '400'
                      source:
                        parameter: filter[repair_status:include]
                Filter value too long:
                  value:
                    errors:
                    - title: Maximum character length not met
                      detail: Filter value must be less than 4096 characters
                      code: decisiv:filters:008
                      status: '400'
                      source:
                        parameter: filter[ro_number]
                Invalid filter characters:
                  value:
                    errors:
                    - title: Invalid filter characters
                      detail: Filter value for filter[ro_number] contains invalid characters.
                      code: decisiv:filters:013
                      status: '400'
                      source:
                        parameter: filter[ro_number]
                Invalid filter shape:
                  value:
                    errors:
                    - title: Invalid filter value shape
                      detail: Filter value for filter[ro_number] must be a string.
                      code: decisiv:filters:014
                      status: '400'
                      source:
                        parameter: filter[ro_number]
                Invalid date format:
                  value:
                    errors:
                    - title: Invalid date format
                      detail: Invalid filter value `{{invalid_filter}}`. Expected an ISO 8601 timestamp.
                      code: decisiv:filters:010
                      status: '400'
                      source:
                        parameter: filter[filter_name]
        '401':
          description: The access token provided in the Authorization header is missing, invalid, or 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: The authenticated user does not have permission to access the requested resource or the feature is
            not enabled for the account.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_response'
              examples:
                Forbidden:
                  value:
                    errors:
                    - title: Forbidden
                      detail: User does not have permission to perform this action on the requested resource(s)
                      code: decisiv:access:001
                      status: '403'
                Feature unavailable:
                  value:
                    errors:
                    - title: Feature unavailable
                      detail: This feature is not enabled for the requested account
                      code: decisiv:account:002
                      status: '403'
        '404':
          description: The requested account could not be 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'
        '424':
          description: An unresolved data dependency or configuration within the Decisiv Platform is 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'
        '428':
          description: The authenticated user's token does not include the required module assignment for this resource.
          content:
            application/vnd.api+json:
              example:
                errors:
                - title: Precondition Required
                  detail: The user does not have the required module assignment
                  code: decisiv:access:003
                  status: '428'
              schema:
                $ref: '#/components/schemas/errors_response'
        '504':
          description: The request timed out due to a long-running query.
          content:
            application/vnd.api+json:
              example:
                errors:
                - title: Gateway timeout error
                  detail: Gateway timeout error
                  code: decisiv:timeout:001
                  status: '504'
              schema:
                $ref: '#/components/schemas/errors_response'
  /service_management/{srm_account_id}/v1/cases/{id}:
    get:
      summary: List details on a specific case
      operationId: getCase
      description: Returns full detail for a single case, including attributes, VMRS codes, invoice fields, and all relationships
        associated with the case.
      tags:
      - Cases
      parameters:
      - name: srm_account_id
        in: path
        description: The account ID for SRM
        required: true
        schema:
          type: string
      - name: id
        in: path
        schema:
          type: string
          format: uuid
        description: The resource UUID
        required: true
      responses:
        '200':
          description: Show details for case
          content:
            application/vnd.api+json:
              example:
                data:
                  id: 487136d2-c4d6-424c-b018-f1ed8a740c6a
                  type: cases
                  attributes:
                    reference_number: 321098
                    complaint: CEL on
                    po_number: V2479-128
                    auth_number: DV793957
                    ro_number: U2112550
                    cause: Diagnostic check required
                    correction: Reset Diagnostics
                    asset_information:
                      odometer_value: 10000
                      odometer_unit: mi
                      engine_hours: 167
                      switch_on_hours: 10
                      stand_by_hours: 2
                    event_timestamps:
                      requested_appointment_time: '2025-10-10T13:30:41Z'
                      requested_completion_time: '2025-10-10T13:30:41Z'
                      followup_time: '2025-10-10T13:30:41Z'
                      closed_at: '2025-04-10T13:30:41Z'
                      asset_uptime: '2025-04-10T13:00:41Z'
                      actual_time_to_repair: '2025-04-10T13:10:41Z'
                      estimated_time_to_repair: '2025-04-10T13:15:41Z'
                      asset_checked_in: '2025-04-10T12:30:41Z'
                      started_at: '2025-04-10T12:00:41Z'
                      asset_arrived: '2025-04-10T11:30:41Z'
                      asset_downtime: '2025-04-10T10:30:41Z'
                      asset_departed_at: '2025-04-10T13:30:41Z'
                    breakdown:
                      location: Outside Seneca Lodge
                      city: Watkins Glen
                      state: NY
                    repair_status: appointment
                    invoice:
                      total: 3758.5
                      number: TR-91324
                      date: '2025-04-10'
                    pricing:
                      parts_total: 432.5
                      labor_total: 250
                      core_total: 75
                      tax: 32.18
                      haz_waste: 15
                    vmrs:
                      asset_type:
                        code_key: '2'
                        code: R
                      repair_priority:
                        code_key: '16'
                        code: '2'
                      repair_site:
                        code_key: '17'
                        code: '7'
                      reason_for_repair:
                        code_key: '14'
                        code: '01'
                      operator_report:
                      - code_key: '82'
                        code: '001'
                      - code_key: '82'
                        code: '002'
                      component:
                        code_key: '33'
                        code: 023-000-000
                      position:
                        code_key: '79'
                        code: '03'
                      technician_failure:
                        code_key: '18'
                        code: B1
                      work_accomplished:
                        code_key: '15'
                        code: A
                    tag_number: null
                  links:
                    self: https://srm-api.decisivapps.com/service_management/{srm_account_id}/v1/cases/487136d2-c4d6-424c-b018-f1ed8a740c6a
                  relationships:
                    customer_asset:
                      data:
                        type: customer_assets
                        id: aa3e7935-bfe2-475e-9be2-80ccef5477c8
                    customer:
                      data:
                        type: customers
                        id: 9b1f3c52-7e44-4a8d-9c2f-1d6e0a2b4c8e
                    billing_contact:
                      data:
                        type: registered_customers
                        id: 7da042d2-c47b-4748-ba65-c114adf1cf62
                    billing_customer:
                      data:
                        type: registered_customers
                        id: 014ee85e-a183-4bf7-b4d7-67e758fa2b2a
                    shipping_customer:
                      data:
                        type: customers
                        id: 11028a0c-1a4b-42c7-86ff-16343fb546a0
                    service_provider:
                      data:
                        type: service_providers
                        id: 65b8d7f1-77aa-4b62-9a62-7207da98bb94
                    program_type:
                      data:
                        type: program_types
                        id: b7390546-9a28-4aed-9e30-1a5afc0ab696
                    primary_contact:
                      data:
                        type: recipients
                        id: 462d54f5-a1a1-48b5-ac0f-2068259105df
                    driver:
                      data:
                        type: recipients
                        id: bd763ee6-b2f2-49fc-a375-7fb5346ee19d
                    assignee:
                      data:
                        type: internal_users
                        id: 6383dc89-05b6-4572-8979-a6257f3597ec
                    department:
                      data:
                        type: departments
                        id: department_code
              schema:
                $ref: '#/components/schemas/case'
        '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'
        '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'
    patch:
      summary: Updates a case
      operationId: updateCase
      description: Updates a case. Any subset of the attributes and relationships listed in the request body schema may be
        supplied; omitted fields are not modified. Immutable attributes (such as `ro_number` once set) cannot be changed and
        will return a 422 error.
      tags:
      - Cases
      parameters:
      - name: srm_account_id
        in: path
        description: The account ID for SRM
        required: true
        schema:
          type: string
      - name: id
        in: path
        schema:
          type: string
          format: uuid
        description: The resource UUID
        required: true
      responses:
        '200':
          description: Successful update the meter data for asset
          content:
            application/vnd.api+json:
              example:
                data:
                  id: 487136d2-c4d6-424c-b018-f1ed8a740c6a
                  type: cases
                  attributes:
                    reference_number: 321098
                    complaint: CEL on
                    po_number: V2479-128
                    auth_number: DV793957
                    ro_number: U2112550
                    cause: Diagnostic check required
                    correction: Reset Diagnostics
                    asset_information:
                      odometer_

# --- truncated at 32 KB (1254 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/decisiv/refs/heads/main/openapi/decisiv-service-management-openapi.yml