The smartthings application allows to put my air conditioner in heating mode while the API does not allow it. Why ?
I believe you need to use Post using the devices commands end point to change a device state like this:
‘https://api.smartthings.com/v1/devices/devise-id/commands’
With a json body like this:
{
“commands”: [
{
“component”: “main”,
“capability”: “switch”,
“command”: “off”,
“arguments”:
}
]
}
The heating command is this:
Status is completed but the command doesn’t work.
The problem is that unlike the SmartThings application, the api does not seem to take this command into account.
Using the ST CLI or the ST Advanced Web App, you should check what commands are available for the device through the API and what the arguments for those commands are.
I tested this command with ST tools. The result is the same. The question is why ST didn’t include the heating mode in the api:
"supportedAcModes": {
"value": [
"cool",
"dry",
"wind",
"auto"
]
How does your thermostat integrate with ST? Are you using drivers on your hub or is it connected via Linked Services?
My air conditioners are directly connected via wifi to the ST cloud
The reason I ask is that it may be the device manufacturer that created the integration and chose what to expose. For example, Comfort Settings for my Ecobee Thermostat can’t be set in ST because Ecobee chose not to expose them in the integration. What make/model is your thermostat and what does it show for “Type” in the Web App or ST CLI?
Manufacturer is SAMSUNG
Type is OCF
"deviceId": "C097276C-D242-0000-0000-000000000000", "name": "RAC 2", "label": "Climatiseur Salon", "manufacturerName": "Samsung Electronics", "presentationId": "DA-AC-RAC-100001", "deviceManufacturerCode": "Samsung Electronics", "locationId": "8e0d5972-8b43-4cb0-a6ef-8fc264ba5be7", "ownerId": "d8076626-fd4a-ab37-c352-c0fa922a656a", "roomId": "32130c29-5aeb-4539-9acc-f36d5eeb93ad", "deviceTypeName": "Samsung OCF Air Conditioner",…
“ocf”: {
“ocfDeviceType”: “oic.d.airconditioner”,
“name”: “RAC 2”,
“specVersion”: “core.1.1.0”,
“verticalDomainSpecVersion”: “res.1.1.0,sh.1.1.0”,
“manufacturerName”: “Samsung Electronics”,
“modelNumber”: “TP6X_RAC_16K|10175541|60010123001111000100000000000000”,
“vendorId”: “DA-AC-RAC-100001”,
“lastSignupTime”: “2022-07-18T17:12:09.174212Z”
},
“type”: “OCF”,
“restrictionTier”: 0,
“allowed”: null
}
So, what is exposed for OCF devices is defined by the presentation ID and that is managed by the group for that appliance. In my case, I have a Samsung fridge that has capabilities defined and that are accessible in the CLI and AWA that are not available in the app because of the presentation definition. I would suggest contacting the support group for the appliances and request that the heat setting be added to the modes command.
bep@debian12:~$ st devices:capability-status 86
───────────────────
# Id
───────────────────
1 cooler
2 cvroom
3 freezer
4 icemaker
5 icemaker-02
───────────────────
6 main (default)
7 pantry-01
8 scale-10
9 scale-11
But the presentation doesn’t expose them
{
"mnmn": "Samsung Electronics",
"vid": "DA-REF-NORMAL-01001",
"version": "0.0.4",
"dashboard": {
"states": [
{
"label": "{{contact.value}}",
"alternatives": [
{
"key": "open",
"value": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT_ATTRIBUTES_CONTACT_OPEN",
"type": "active"
},
{
"key": "closed",
"value": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT_ATTRIBUTES_CONTACT_CLOSED",
"type": "active"
}
],
"capability": "contactSensor",
"version": 1,
"component": "main",
"composite": false,
"group": "main",
"transient": false
}
],
"actions": [],
"basicPlus": []
},
"automation": {
"conditions": [
{
"capability": "thermostatCoolingSetpoint",
"version": 1,
"label": "___PO_CODE_SAMSUNGELECTRONICS.DA_THERMOSTATCOOLINGSETPOINT_FREEZER",
"displayType": "numberField",
"numberField": {
"value": "coolingSetpoint.value",
"valueType": "number",
"unit": "coolingSetpoint.unit",
"range": [
-23,
-15
]
},
"exclusion": [],
"component": "freezer"
},
{
"capability": "thermostatCoolingSetpoint",
"version": 1,
"label": "___PO_CODE_SAMSUNGELECTRONICS.DA_THERMOSTATCOOLINGSETPOINT_COOLER",
"displayType": "numberField",
"numberField": {
"value": "coolingSetpoint.value",
"valueType": "number",
"unit": "coolingSetpoint.unit",
"range": [
1,
7
]
},
"exclusion": [],
"component": "cooler"
}
],
"actions": [
{
"capability": "samsungce.powerCool",
"version": 1,
"label": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT",
"displayType": "list",
"list": {
"alternatives": [
{
"key": "activate",
"value": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT_COMMANDS_ACTIVATE",
"type": "active"
},
{
"key": "deactivate",
"value": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT_COMMANDS_DEACTIVATE",
"type": "active"
}
]
},
"component": "main",
"exclusion": []
},
{
"capability": "samsungce.powerFreeze",
"version": 1,
"label": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT",
"displayType": "list",
"list": {
"alternatives": [
{
"key": "activate",
"value": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT_COMMANDS_ACTIVATE",
"type": "active"
},
{
"key": "deactivate",
"value": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT_COMMANDS_DEACTIVATE",
"type": "active"
}
]
},
"component": "main",
"exclusion": []
}
]
},
"dpInfo": [
{
"os": "android",
"dpUri": "plugin://com.samsung.android.plugin.refrigerator.v2",
"arguments": []
},
{
"os": "tizen",
"dpUri": "plugin://com.samsung.tizen.plugin.refrigerator.v2/assets/files/App/index.html",
"arguments": []
},
{
"os": "ios",
"dpUri": "plugin://com.samsung.ios.plugin.refrigerator.v2/assets/files/App/index.html",
"arguments": []
}
],
"language": [
{
"locale": "en_US",
"poCodes": [
{
"label": "Cooling temperature",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.THERMOSTATCOOLINGSETPOINT_DEFAULT_ATTRIBUTES_COOLINGSETPOINT"
},
{
"label": "Cooling temperature",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.THERMOSTATCOOLINGSETPOINT_DEFAULT_COMMANDS_SETCOOLINGSETPOINT"
},
{
"label": "Cooling temperature",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.THERMOSTATCOOLINGSETPOINT_DEFAULT"
},
{
"label": "Contact sensor",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT_ATTRIBUTES_CONTACT"
},
{
"label": "Door open",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT_ATTRIBUTES_CONTACT_OPEN"
},
{
"label": "Door closed",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT_ATTRIBUTES_CONTACT_CLOSED"
},
{
"label": "Contact sensor",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT"
},
{
"label": "Turn On",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT_COMMANDS_ACTIVATE"
},
{
"label": "Power Cool",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT"
},
{
"label": "Turn Off",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT_COMMANDS_DEACTIVATE"
},
{
"label": "Turn Off",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT_COMMANDS_DEACTIVATE"
},
{
"label": "Power Freeze",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT"
},
{
"label": "Turn On",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT_COMMANDS_ACTIVATE"
},
{
"label": "Freezer setting temp",
"po": "___PO_CODE_SAMSUNGELECTRONICS.DA_THERMOSTATCOOLINGSETPOINT_FREEZER"
},
{
"label": "Fridge setting temp",
"po": "___PO_CODE_SAMSUNGELECTRONICS.DA_THERMOSTATCOOLINGSETPOINT_COOLER"
}
]
},
{
"locale": "en",
"poCodes": [
{
"label": "Cooling temperature",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.THERMOSTATCOOLINGSETPOINT_DEFAULT_ATTRIBUTES_COOLINGSETPOINT"
},
{
"label": "Cooling temperature",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.THERMOSTATCOOLINGSETPOINT_DEFAULT_COMMANDS_SETCOOLINGSETPOINT"
},
{
"label": "Cooling temperature",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.THERMOSTATCOOLINGSETPOINT_DEFAULT"
},
{
"label": "Contact sensor",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT_ATTRIBUTES_CONTACT"
},
{
"label": "Door open",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT_ATTRIBUTES_CONTACT_OPEN"
},
{
"label": "Door closed",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT_ATTRIBUTES_CONTACT_CLOSED"
},
{
"label": "Contact sensor",
"po": "___PO_CODE_CAPABILITY.SMARTTHINGS.CONTACTSENSOR_DEFAULT"
},
{
"label": "Turn On",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT_COMMANDS_ACTIVATE"
},
{
"label": "Power Cool",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT"
},
{
"label": "Turn Off",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERCOOL_DEFAULT_COMMANDS_DEACTIVATE"
},
{
"label": "Turn Off",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT_COMMANDS_DEACTIVATE"
},
{
"label": "Power Freeze",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT"
},
{
"label": "Turn On",
"po": "___PO_CODE_CAPABILITY.SAMSUNGCE.POWERFREEZE_DEFAULT_COMMANDS_ACTIVATE"
},
{
"label": "Freezer setting temp",
"po": "___PO_CODE_SAMSUNGELECTRONICS.DA_THERMOSTATCOOLINGSETPOINT_FREEZER"
},
{
"label": "Fridge setting temp",
"po": "___PO_CODE_SAMSUNGELECTRONICS.DA_THERMOSTATCOOLINGSETPOINT_COOLER"
}
]
}
],
"manufacturerName": "Samsung Electronics",
"presentationId": "DA-REF-NORMAL-01001"
}
Can you tell me how to join the support group for the appliances?
Thanks.
I don’t know if there is a community like this one for appliance. Appliance support can be contacted at Contact Us | Official Samsung Support US
Thanks. The subject can be closed.
Hi Phillipe, I just found this thread, I have the exact same Samsung Air Con with the missing “heat” mode and was wondering if you found a solution to use the api to change the mode to “heat” somehow.
Even though the heat mode is not exposed by the mobile app, you can set it via the API, the Rules API, and possibly via the ST CLI or the Advanced Web App. If you can set the mode via a command in the CLI, you can run it in DEBUG mode to see the API call that is being sent. For example, the icemaker in my fridge isn’t exposed in the mobile app, but you can turn it on/off via the CLI and in the output below you can see the API call:
REFRIGERATOR
Components:
─────────────────
1 main
2 freezer
3 cooler
4 cvroom
5 icemaker
6 icemaker-02
7 icemaker-03
8 scale-10
9 scale-11
10 pantry-01
11 camera-01
─────────────────
? Enter component index or id 5
Capabilities:
─────────────────────────────────
1 switch
2 samsungce.fridgeIcemakerInfo
3 custom.disabledCapabilities
─────────────────────────────────
? Enter capability index or id 1
[2025-12-15T20:17:37.412] [DEBUG] login-authenticator - authentication - enter
[2025-12-15T20:17:37.413] [DEBUG] rest-client - making axios request: {"url":"https://api.smartthings.com/capabilities/switch/1","method":"get","headers":{"Content-Type":"application/json;charset=utf-8","Accept":"application/json","User-Agent":"@smartthings/cli/1.10.6 linux-x64 node-v18.5.0","Accept-Language":"en-US","Authorization":"Bearer 272b50c8-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}}
Commands:
──────────
1 off()
2 on()
──────────
? Enter command 2
[2025-12-15T20:17:41.007] [DEBUG] login-authenticator - authentication - enter
[2025-12-15T20:17:41.009] [DEBUG] rest-client - making axios request: {"url":"https://api.smartthings.com/devices/4a6ecf43-xxxx-xxxx-xxxx-c6d48db708d9/commands","method":"post","headers":{"Content-Type":"application/json;charset=utf-8","Accept":"application/json","User-Agent":"@smartthings/cli/1.10.6 linux-x64 node-v18.5.0","Accept-Language":"en-US","Authorization":"Bearer 272b50c8-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},"data":{"commands":[{"component":"icemaker","capability":"switch","command":"on"}]}}
Command executed successfully
Hi Nuno and Bruce,
In my case, the heating mode is present in the mobile application but not available in the API. This appears to be un bug in the API.
yes thats my impression as well, using postman direct commands, “heat” is accepted but the unit doesnt recognize it. Using the smartthings app, i can change the unit to heat without any issues!
Hi, @Philippe_Leborgne and @Nuno_Conceicao
The appliances are a different type of device called OCF.
They use a different communication protocol and they work more on the app level than the API level. That’s why you can see something different on the app than the API
Also, if a “handler” for certain commands or parameter values isn’t inclided in the device integration (code), they won’t work even if the API accepts it (this is true for any integration type).
This is because the API only checks that the syntax is correct and the command is sent to the device, but it isn’t processed by the integration that controls it.

