The Vehicle Information Service Specification (VISS) is a service for accessing vehicle information, including signals from sensors on control units within a vehicle's network.

VISS enables a broad range of use cases, including predictive maintenance, usage-based insurance, fleet management, and real-time driver assistance services. In the context of artificial intelligence, VISS serves as a critical data access layer, providing high-quality, real-time vehicle data that can be utilized by AI algorithms for tasks such as anomaly detection, driver behavior analysis, energy optimization, and contextual decision-making.

There are three parts to the VISS specification, [[CORE]], [[TRANSPORT]], and [[PAYLOAD_ENCODING]]. The [[CORE]] document describes the messaging layer, the [[TRANSPORT]] document describes the deviations form the CORE specification that are used by some transport protocols, and the [[PAYLOAD_ENCODING]] document describes payload encodings that are supported.

This document, the VISS Implementation Guideline version, provides recommendations on how to implement certain features to ensure implementation interoperability. The versioning of this document is decoupled from the versioning of the VISS specification. For guideline chapters that are not applicable to older versions of VISS, this shall be mentioned in the chapter.

Revision history

Version Date Author(s) Revision reason
0.5 2026-03-25 Ulf Björkengren, Ford Motor Company Initial document layout
1.0 2026-04-16 Abdelkader Sellami, Volvo Group Chapter 5 CAN Bus Specific value reporting

Introduction

This document supplements the VISS specification by providing recommendations on how to implement certain aspects of the specification. These aspects are typically not explicitly exposed in the VISS interface but different implementations may lead to different behaviors leading to clients receiving different responses from different implementations. This may make interoperability more complicated to achieve, i. e. that a client shall be able to exercise the interface with any implementation of it.

Terminology

The acronym 'VISSv3.1' is used to refer to this document, the VISS version 3.1 specification. The acronym 'VSS' is used to refer to the 'Vehicle Signal Specification' which is hosted by COVESA. The term 'WebSocket' when used in this document, is as defined in the W3C WebSocket API and [[RFC6455]], the WebSocket Protocol. The term 'CAN' when used in this document, is as defined in [[ISO 11898]].

CAN Bus specific value reporting

In the CAN standard, parameter (signal) values are often segmented into defined value ranges. These segments typically include a range representing valid parameter values, one or more segments indicating error or not available parameter states, and a reserved range intended for future extension. While the CAN standard [[ISO 11898]] defines only frame transmission and bus‑level error handling, the segmentation of parameter values is defined by higher‑layer CAN protocols.
For example, in [[SAE J1939]], which standardizes how parameter values are segmented, including the use of specific encoded values to represent Not Available or Error data [[SAE J1939-71]].

When a VISS server implementation retrieves signal values from a CAN bus, these higher‑layer, protocol‑specific value encodings SHALL be translated into appropriate error codes. This translation ensures that clients receive consistent and meaningful error responses, independent of the underlying CAN transport or the specific CAN protocol used on the vehicle network.

A server implementing this specification SHALL support the error codes, reasons, and descriptions listed in the table below, across all supported transport protocols.

CAN Signal Status Error Number (Code) Error Reason Error Description
NOT_AVAILABLE 503 (Service Unavailable) service_unavailable The value from the upstream ECU or sensor on the CAN bus is currently not available.
ERROR 500 (Internal Server Error) internal_server_error The upstream ECU or sensor on the CAN bus reported an error condition for the signal.

The server MAY dynamically replace the error description to provide additional diagnostic context where possible, such as the specific CAN signal identifier or a description of the fault condition, to assist clients during debugging and integration.

CAN "NOT_AVAILABLE" value

A CAN signal may carry a special value that indicates NOT_AVAILABLE. This status typically means that the ECU responsible for producing the signal is not currently providing a value, for example because the corresponding subsystem is inactive, the sensor is disconnected, or the signal has not yet been initialized on the bus.

When the VISS server detects a NOT_AVAILABLE value on a CAN signal that has been requested by a client, it SHALL map this to the VISS error code 503(Service Unavailable) [[TRANSPORT]].
This communicates to the client that the requested data point could not be retrieved because no valid value is currently available on the vehicle CAN network.

An example error response is shown below:

            {
              "action": "get",
              "requestId": "123",
              "error": {
                "number": 503,
                "reason": "service_unavailable",
                "description": "The value from the upstream ECU or sensor on the CAN bus is currently not available."
              },
              "ts": "2025-06-20T12:00:00.000Z"
            }
      

CAN "ERROR" value

A CAN signal may carry a special value that indicates an ERROR condition. This status typically means that the ECU or sensor producing the signal has detected a fault, for example a hardware malfunction, a communication timeout on the bus, or an internal diagnostic failure that renders the signal value unreliable.

When the VISS server detects an ERROR value on a CAN signal that has been requested by a client, it SHALL map this to the VISS error code 500 (Internal Server Error) [[TRANSPORT]].
This communicates to the client that the upstream data source (the CAN bus / ECU) reported an error condition.

An example error response is shown below:

            {
              "action": "get",
              "requestId": "456",
              "error": {
                "number": 500,
                "reason": "internal_server_error",
                "description": "The upstream ECU or sensor on the CAN bus reported an error condition for the signal."
              },
              "ts": "2025-06-20T12:00:00.000Z"
            }