First you need a list of items in node.json like this:
{
    "title": "Playlist",
    "name": "playlist",
    "type": "list",
    "itemname": "Item",
    "items": [{
        "title": "Asset",
        "ui_width": 8,
        "name": "asset",
        "type": "resource",
        "valid": ["image", "video"],
        "default": "empty.png"
    }, {
        "title": "Play time (in seconds)",
        "ui_width": 4,
        "name": "duration",
        "type": "duration",
        "default": 10
    }]
}
The name of the playlist ("playlist" in this example) is up to you, but is later used in the generated config.json on the device. The "items" value needs some special requirements to make such a list “playlist-compatible”. Namely one entry  called "asset" and one named "duration". If both of those are included as properties of a list’s item description, the configuration UI on the dashboard will allow you to easily use assets or native playlists when filling that playlist.
If you create a setup based on such a package, the config.json file generated and synced to the device now contains the configured assets like this:
  ... 
  "playlist": [
    {
      "duration": 10,
      "asset": {
        "asset_id": 12345,
        "asset_name": "asset-d8e8fca2dc0f896fd7cb4cb0031ba249-asset-filename.jpg",
        "filename": "asset-filename.jpg",
        "metadata": {
          "format": "jpeg",
          "height": 1080,
          "width": 1920
        },
        "tags": [],
        "type": "image"
      }
    }, [... possibly more assets...]
  ],
  ...
Once the config.json file is updated (you can detect that with util.json_watch), you are guaranteed that the asset files referenced by "asset_name" are also already available for use on the device.
Hope that help.