C2C Development: Device Profile Builder vs. Workspace (Issue with Multi-Switch UI)

I am currently working on a C2C (SmartThings Cloud Connector) development project.

Until recently (before August 4, 2025), I believe most developers used the Workspace to create and test device profiles. However, it seems SmartThings now guides us to use the Device Profile Builder instead:
https://developer.smartthings.com/workspace/projects

Back in March, I only did some initial testing, but now my company has an official SmartThings integration project. So I am following the new approach using the Device Profile Builder. (On a related note, there was a recent issue with device profile creation on the C2C server side, which I raised both with the product team and here in the community, and that issue was eventually resolved.)

Now, I am testing multi-component devices, based on the multi-switch sample in the documentation:
https://developer.smartthings.com/docs/devices/configurations-and-presentations/device-configurations

For example, the sample JSON looks like this:

"dashboard": {
  "states": [
    { "component": "main", "capability": "switch", "version": 1, "group": "main" },
    { "component": "switchTwo", "capability": "switch", "version": 1, "group": "Switch-2" },
    { "component": "switchThree", "capability": "switch", "version": 1, "group": "Switch-3" },
    { "component": "switchFour", "capability": "switch", "version": 1, "group": "Switch-4" }
  ],
  "actions": [
    { "component": "main", "capability": "switch", "version": 1, "group": "main" },
    { "component": "switchTwo", "capability": "switch", "version": 1, "group": "Switch-2" },
    { "component": "switchThree", "capability": "switch", "version": 1, "group": "Switch-3" },
    { "component": "switchFour", "capability": "switch", "version": 1, "group": "Switch-4" }
  ]
}

According to the documentation, this should display four switches grouped in the SmartThings app dashboard.
However, when I actually create a device profile using the Device Profile Builder, download the JSON, and test it, only a single switch icon appears on the dashboard.



{
	"deviceProfile"      : {
		"id"                : "ef9259c0-ee8d-42c1-abb3-d08e434d55ef",
		"name"              : "multiSwitch20150825",
		"metadata"          : {
			"deviceType"       : "Switch",
			"vid"              : "95d81bec-b56f-4544-961a-c9911c54d211",
			"mnmn"             : "tomorrowmoney17668",
			"presentationId"   : "95d81bec-b56f-4544-961a-c9911c54d211",
			"integrationType"  : "cloud",
			"manufacturerName" : "tomorrowmoney17668",
			"mainState"        : "main~switch~1",
			"mainAction"       : "main~switch~1",
			"resourceType"     : "oic.d.switch"
		},
		"migrationStatus" : "NOT_MIGRATED",
		"status"          : "DEVELOPMENT",
		"preferences"     : [],
		"components"      : [
			{
				"label"        : "Main",
				"id"           : "main",
				"capabilities" : [
					{ "id": "healthCheck", "version": 1, "optional": false, "ephemeral": false },
					{ "id": "refresh"    , "version": 1, "optional": false, "ephemeral": false },
					{ "id": "switch"     , "version": 1, "optional": false, "ephemeral": false }
				],
				"categories" : [
					{ "name": "Switch", "categoryType": "manufacturer" }
				],
				"optional" : false
			},
			{
				"label"        : "switchTwo",
				"id"           : "switchtwo",
				"capabilities" : [
					{ "id": "switch"     , "version": 1, "optional": false, "ephemeral": false }
				],
				"categories" : [],
				"optional"   : false
			},
			{
				"label"        : "switchThree",
				"id"           : "switchthree",
				"capabilities" : [
					{ "id": "switch"     , "version": 1, "optional": false, "ephemeral": false }
				],
				"categories" : [],
				"optional"   : false
			},
			{
				"label"        : "switchFour",
				"id"           : "switchfour",
				"capabilities" : [
					{ "id": "switch"     , "version": 1, "optional": false, "ephemeral": false }
				],
				"categories" : [],
				"optional"   : false
			}
		]
	},
	"deviceConfiguration" : {
		"mnmn"               : "tomorrowmoney17668",
		"vid"                : "95d81bec-b56f-4544-961a-c9911c54d211",
		"version"            : "0.0.1",
		"type"               : "profile",
		"dashboard"          : {
			"states"            : [
				{ "component": "main", "capability": "switch", "version": 1, "idx": 0, "group": "main", "values": [], "composite": false }
			],
			"actions" : [
				{ "component": "main", "capability": "switch", "version": 1, "idx": 0, "group": "main" }
			],
			"basicPlus" : []
		},
		"detailView" : [
			{ "component": "main", "capability": "healthCheck", "version": 1, "values": [], "patch": [] },
			{ "component": "main", "capability": "refresh", "version": 1, "values": [], "patch": [] },
			{ "component": "main", "capability": "switch", "version": 1, "values": [], "patch": [] },
			{ "component": "switchtwo", "capability": "switch", "version": 1, "values": [], "patch": [] },
			{ "component": "switchthree", "capability": "switch", "version": 1, "values": [], "patch": [] },
			{ "component": "switchfour", "capability": "switch", "version": 1, "values": [], "patch": [] }
		],
		"automation"  : {
			"conditions" : [
				{ "component": "main", "capability": "healthCheck", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "main", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "switchtwo", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "switchthree", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "switchfour", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] }
			],
			"actions" : [
				{ "component": "main", "capability": "healthCheck", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "main", "capability": "refresh", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "main", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "switchtwo", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "switchthree", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
				{ "component": "switchfour", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] }
			]
		},
		"presentationId"   : "95d81bec-b56f-4544-961a-c9911c54d211",
		"manufacturerName" : "tomorrowmoney17668"
	}
}

So my questions are:

  • Is it currently not possible to implement multi-component devices properly through the Device Profile Builder?
  • Do we instead need to manually create the JSON files using the SmartThings CLI?
  • Or is this simply a case where the documentation has not yet been updated to reflect the latest changes?

Any insights or experiences from other developers would be greatly appreciated.

We reviewed the presentation of your profile and those values are not appearing. It’s possible that they were not saved correctly or that you received an error during the process. Could you please send us the file by email at ** build@smartthings.com** so we can validate it?

Also, did you create the profile from scratch, or had you already installed it at least once before? If the latter, that could be the cause, as the presentation may not be refreshing after that.