CANlink mobile 10000 (3.4.0)

Download OpenAPI specification:

This document describes the HTTP-based local API supported by CANlink mobile 10000 devices.

General properties

Access

Protocol: HTTPS, REST.

Authorization: Basic Authentication, required user is api or admin.

Authentication failure results in HTTP error 401 Unauthorized.

curl examples in this document use the plain-text authentication option --user username:password, but this can also be replaced with an Authorization header containing Basic followed by a base64-encoded username:password string. For instance, to authorize as user api with password password, use --user api:password or the header -H 'Authorization: Basic YXBpOnBhc3N3b3Jk'.

Certificate: The device provides a self-signed certificate, so the curl examples in this document use --insecure to skip TLS certificate verification.

Response type: JSON (Content-Type: application/json), with one exception — GET /api/downloads/{fileId}/content returns the raw file as application/octet-stream.

Response envelope

Every JSON endpoint wraps its result in a common envelope:

{"data": {"items": [ ... ]}}

This applies even to single-resource endpoints such as GET /api/device-info — the items array always holds exactly one element there. There is no bare/unwrapped object response anywhere in this API.

Methods & status codes

GET is supported on every /api/* resource; DELETE is additionally supported for the downloads resource. Any other HTTP method on an /api/* path returns 405 Method Not Allowed, and an unrecognized resource under /api/ returns 404 Not Found. See each endpoint's own responses for the specific conditions that trigger 400/404/500 for that endpoint.

Multipart upload endpoints

POST /upload, POST /config and POST /firmware are bare top-level paths (no /api prefix) served by the same host, but are not part of the JSON envelope convention above: they accept multipart/form-data bodies (a single part named exactly file) and always return a zero-length response body regardless of outcome — only the HTTP status code is meaningful.

Device

Device identity and time information.

Get device information

Return identity, hardware and firmware information for the device.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/device-info"
Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get current UTC time

Return the device's current UTC time.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/datetime"
Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Configuration Update

Read current configuration option values, and push configuration update files to the device.

Read configuration options

Lists configuration options and their current values. No sensitive information is shared. Without any query parameter, all options are returned. The option parameter narrows the output to a single configuration option. Some options are profile-based (group_name-scoped) — e.g. per-profile Ethernet, WiFi or modem settings — and require group_name to be supplied alongside option; omitting it for such an option results in a 400 Bad Request. The group_name parameter on its own narrows the output to all options of a specific configuration group.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/config"

Filtered by option and profile:

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/config?option=CFG_OPTION_STR_IF_ETHERNET_IPV4_ADDRESS&group_name=Test%20group"
Authorizations:
basicAuth
query Parameters
option
string (ConfigOptionName)
Enum: "CFG_OPTION_STR_DP_CU_ID" "CFG_OPTION_BOOL_DP_AUTO_UPLOAD_ENABLED" "CFG_OPTION_BOOL_ACCESS_LOCAL_UPLOAD_ENABLED" "CFG_OPTION_BOOL_IF_MODEM_ENABLED" "CFG_OPTION_BOOL_IF_MODEM_AUTOCONNECT" "CFG_OPTION_STR_IF_MODEM_APN" "CFG_OPTION_BOOL_IF_ETHERNET_ENABLED" "CFG_OPTION_BOOL_IF_ETHERNET_AUTOCONNECT" "CFG_OPTION_STR_IF_ETHERNET_IPV4_ADDRESS" "CFG_OPTION_STR_IF_ETHERNET_IPV4_METHOD" "CFG_OPTION_STR_IF_ETHERNET_IPV4_DHCP_FIRST_ADDRESS" "CFG_OPTION_STR_IF_ETHERNET_IPV4_DHCP_LAST_ADDRESS" "CFG_OPTION_BOOL_IF_WIFI_ENABLED" "CFG_OPTION_BOOL_IF_WIFI_AUTOCONNECT" "CFG_OPTION_UINT32_IF_WIFI_CHANNEL" "CFG_OPTION_STR_IF_WIFI_BAND" "CFG_OPTION_BOOL_IF_WIFI_HIDDEN_SSID" "CFG_OPTION_BYTES_IF_WIFI_SSID" "CFG_OPTION_BYTES_IF_WIFI_BSSID" "CFG_OPTION_STR_IF_WIFI_MODE" "CFG_OPTION_STR_IF_WIFI_SECURITY_KEY_MANAGEMENT" "CFG_OPTION_STR_IF_WIFI_IPV4_ADDRESS" "CFG_OPTION_STR_IF_WIFI_IPV4_METHOD" "CFG_OPTION_STR_IF_WIFI_IPV4_DHCP_FIRST_ADDRESS" "CFG_OPTION_STR_IF_WIFI_IPV4_DHCP_LAST_ADDRESS" "CFG_OPTION_BOOL_GNSS_ENABLED" "CFG_OPTION_BOOL_GNSS_GLONASS_ENABLED" "CFG_OPTION_BOOL_GNSS_BEIDOU_ENABLED" "CFG_OPTION_BOOL_GNSS_GALILEO_ENABLED" "CFG_OPTION_STR_DATETIME_TIMEZONE" "CFG_OPTION_UINT16_CFG_VERSION" "CFG_OPTION_BOOL_PWR_SLEEP_MODE_ENABLED" "CFG_OPTION_BOOL_PWR_TRANSPORT_MODE_ENABLED" "CFG_OPTION_UINT16_API_COMPATIBILITY" "CFG_OPTION_UINT32_IF_MODEM_MTU" "CFG_OPTION_BOOL_IF_BRIDGE_ENABLED" "CFG_OPTION_STR_IF_BRIDGE_WIFI_BAND" "CFG_OPTION_BOOL_IF_BRIDGE_WIFI_HIDDEN_SSID" "CFG_OPTION_BYTES_IF_BRIDGE_WIFI_SSID" "CFG_OPTION_BYTES_IF_BRIDGE_WIFI_BSSID" "CFG_OPTION_STR_IF_BRIDGE_WIFI_SECURITY_KEY_MANAGEMENT" "CFG_OPTION_STR_IF_BRIDGE_IPV4_ADDRESS" "CFG_OPTION_STR_IF_BRIDGE_IPV4_METHOD" "CFG_OPTION_STR_IF_BRIDGE_IPV4_DHCP_FIRST_ADDRESS" "CFG_OPTION_STR_IF_BRIDGE_IPV4_DHCP_LAST_ADDRESS"

Filter to a single configuration option. See ConfigOptionName for the full list of valid values.

group_name
string
Example: group_name=Test group

Name of a configuration profile (dynamic/group-based option group, e.g. an Ethernet, WiFi or modem connection profile). Required when option refers to a profile-based option; if supplied without option, all profile-based options for that group are returned.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Upload a configuration update file

Upload a configuration file to be applied to the device. This is a distinct, bare top-level path — not the same resource as GET /api/config (which only reads current configuration values over JSON). Uploading a file here triggers the same process as applying a configuration update through the CANlink mobile 10000's WebUI.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X POST \
    --insecure \
    --user "admin:yourPassword" \
    -F "file=@./device-config.clm" \
    "https://192.168.82.1/config"
Authorizations:
basicAuth
Request Body schema: multipart/form-data
required

The configuration file to apply.

file
required
string <binary>

The file to upload, as a multipart part named exactly file. Any other part name is rejected with 400 Bad Request.

Responses

Firmware Update

Check firmware version/update status, and push new firmware images to the device.

Get last firmware update result

Return information about the most recent firmware update attempt.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/firmware-update"
Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get state of firmware update progress

Return the current in-progress firmware update state, if any.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/state-firmware-update"
Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Push a firmware update image

Upload a .swu firmware image to flash onto the CANlink mobile 10000. A 200 response only confirms the image was fully transferred to the device — it does not confirm that flashing itself succeeded. Track the actual firmware update progress via GET /api/state-firmware-update; on success, the device reboots into the new firmware. If a firmware update is already in progress, the request is rejected immediately. There is no application-level file size limit; the Content-Length header is used only to compute a progress percentage, not to reject oversized bodies.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X POST \
    --insecure \
    --user "admin:yourPassword" \
    -F "file=@./firmware-image.swu" \
    "https://192.168.82.1/firmware"
Authorizations:
basicAuth
Request Body schema: multipart/form-data
required

The firmware image (.swu) to flash.

file
required
string <binary>

The file to upload, as a multipart part named exactly file. Any other part name is rejected with 400 Bad Request.

Responses

State

Runtime/status information for device subsystems.

Get system uptime

Return the device's system uptime.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/state-system"
Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get DataPlatform connection state

Return whether the device is currently connected to the DataPlatform.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/state-server"
Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get network interface state

Return connection/interface state for one or all network interfaces.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/state-network?type=NETWORK_TYPE_MODEM"
Authorizations:
basicAuth
query Parameters
type
string (NetworkType)
Enum: "NETWORK_TYPE_MODEM" "NETWORK_TYPE_ETHERNET" "NETWORK_TYPE_WIFI" "NETWORK_TYPE_BRIDGE"

Restrict the result to a single interface type. If omitted, all four interface types are returned (any type unsupported by the current hardware variant is silently skipped). If given explicitly and unsupported by the hardware, the request fails with 400.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

GNSS

GNSS (satellite positioning) status.

Get GNSS position and status

Return the device's current GNSS status. If GNSS is disabled, only enabled: false is returned.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/gnss"
Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

File transfer

All endpoints in this group relate to the file transfer functionality between the CANlink mobile 10000 and the Proemion DataPlatform.

List all files available in the downloads directory

The CANlink mobile 10000 device is capable of receiving files from the DataPlatform. The user can upload any file to the DataPlatform which will push it to the CANlink mobile 10000, thus making it available on the CANlink mobile 10000 local network. A common use case is to upload update and configuration files for ECUs connected to the CANlink mobile 10000 network.

Files uploaded to the DataPlatform are then transferred to the CANlink mobile 10000 which will hold them in the downloads location. Note that due to the implementation of the file transfer process, files that are still incomplete because they are still being transferred will be named part.{random}. Files that match this pattern should be ignored because they have still not been fully transferred to the CANlink mobile 10000.

List all files available in the downloads directory.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/downloads"
Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Remove all files from downloads directory

Remove all files from the downloads directory.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X DELETE \
    --insecure \
    --user "admin:yourPassword" \
    "https://192.168.82.1/api/downloads"
Authorizations:
basicAuth

Responses

Get info of a specific file in the downloads directory

Get info of a specific file in the downloads directory.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/json" \
    "https://192.168.82.1/api/downloads/8c9890dd-2da4-54e1-886f-7a031884a5fa"
Authorizations:
basicAuth
path Parameters
fileId
required
string <uuid>
Example: 8c9890dd-2da4-54e1-886f-7a031884a5fa

UUIDv5 of the file.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Remove a file from downloads directory

Remove a file from the downloads directory.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X DELETE \
    --insecure \
    --user "admin:yourPassword" \
    "https://192.168.82.1/api/downloads/8c9890dd-2da4-54e1-886f-7a031884a5fa"
Authorizations:
basicAuth
path Parameters
fileId
required
string <uuid>
Example: 8c9890dd-2da4-54e1-886f-7a031884a5fa

UUIDv5 of the file.

Responses

Download file content

Download the raw contents of a given file.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/octet-stream" \
    "https://192.168.82.1/api/downloads/8c9890dd-2da4-54e1-886f-7a031884a5fa/content"

This example prints file contents to the console output. If the received data has a binary form, curl will raise a warning and ask to save contents into a file.

Save file contents in /tmp/update-file.bin:

curl -X GET \
    --insecure \
    --user "admin:yourPassword" \
    -H "Accept: application/octet-stream" \
    "https://192.168.82.1/api/downloads/8c9890dd-2da4-54e1-886f-7a031884a5fa/content" --output "/tmp/update-file.bin"
Authorizations:
basicAuth
path Parameters
fileId
required
string <uuid>
Example: 8c9890dd-2da4-54e1-886f-7a031884a5fa

UUIDv5 of the file.

Responses

Queue a file for upload to the DataPlatform

Submit a file to the device to be queued for transfer to the DataPlatform. The uploaded filename is sanitized, and the file is then stored persistently on the device until it has been successfully transferred to the DataPlatform (this response only confirms the file was received and queued — it does not confirm the DataPlatform transfer itself). If the upload is repeatedly interrupted or currently not possible, the device keeps retrying to send queued files to the DataPlatform (subject to the CFG_OPTION_BOOL_DP_AUTO_UPLOAD_ENABLED configuration option being enabled). There is no application-level file size limit; practical limits are disk space and connection timeout.

All examples assume HTTP Basic Authentication (--user admin:yourPassword) and a self-signed TLS certificate on the device, hence --insecure.

curl -X POST \
    --insecure \
    --user "admin:yourPassword" \
    -F "file=@./update-file.bin" \
    "https://192.168.82.1/upload"
Authorizations:
basicAuth
Request Body schema: multipart/form-data
required

The file to upload.

file
required
string <binary>

The file to upload, as a multipart part named exactly file. Any other part name is rejected with 400 Bad Request.

Responses