Saving a SuperTable field within a Matrix Field
Finally figured this out, I had to delve into the matrix field and get the individual block ids for the Supertable fields.

$matrixBlocks = Craft::$app-&gt;getFields()-&gt;getFieldByHandle('eventPerformances')-&gt;getBlockTypeFields();
$ticketBlockId = (int)$matrixBlocks[2]['id'];
$linkBlockId = (int)$matrixBlocks[3]['id'];

$ticketsField = Craft::$app-&gt;getFields()-&gt;getFieldById($ticketBlockId);
$ticketsBlockTypes = SuperTable::$plugin-&gt;getService()-&gt;getBlockTypesByFieldId($ticketsField-&gt;id);
$ticketsBlockType = $ticketsBlockTypes[0];

$linksField = Craft::$app-&gt;getFields()-&gt;getFieldById($linkBlockId);
$linkBlockTypes = SuperTable::$plugin-&gt;getService()-&gt;getBlockTypesByFieldId($linksField-&gt;id);
$linksBlockType = $linkBlockTypes[0];


After casting these to integers and then using that value as the type value when saving the matrix block, it all works!

Full code below, hopefully it will help others out in this situation:

$matrixBlocks = Craft::$app-&gt;getFields()-&gt;getFieldByHandle('eventPerformances')-&gt;getBlockTypeFields();
$ticketBlockId = (int)$matrixBlocks[2]['id'];
$linkBlockId = (int)$matrixBlocks[3]['id'];

$ticketsField = Craft::$app-&gt;getFields()-&gt;getFieldById($ticketBlockId);
$ticketsBlockTypes = SuperTable::$plugin-&gt;getService()-&gt;getBlockTypesByFieldId($ticketsField-&gt;id);
$ticketsBlockType = $ticketsBlockTypes[0];

$linksField = Craft::$app-&gt;getFields()-&gt;getFieldById($linkBlockId);
$linkBlockTypes = SuperTable::$plugin-&gt;getService()-&gt;getBlockTypesByFieldId($linksField-&gt;id);
$linksBlockType = $linkBlockTypes[0];

$performancesMatrix = array();
$ticketsMatrix = array();
$linksMatrix = array();
$performances = $event['schedules'][0]['performances'];
$i = 1;

foreach ($performances as $performance) {

     if (array_key_exists('tickets', $performance))
     {
         $t = 1;

         foreach ($performance['tickets'] as $ticket) 
         {

             $ticketsMatrix['new'.$t] = array(
                 'type' =&gt; $ticketsBlockType-&gt;id,
                 'enabled' =&gt; true,
                 'fields' =&gt; array(
                 'ticketType' =&gt; $ticket['type'],
                 'minPrice' =&gt; (array_key_exists('min_price', $ticket) ? $ticket['min_price'] : ''),
                 'maxPrice' =&gt; (array_key_exists('max_price', $ticket) ? $ticket['max_price'] : ''),
                 'currency' =&gt; (array_key_exists('currency', $ticket) ? $ticket['currency'] : ''),
                 ),
             );
             $t++;
         }
     }

    if(array_key_exists('links', $performance))
    {
         $l = 1;
         foreach($performance['links'] as $link) 
         {

             $linksMatrix['new'.$l] = array(
                 'type' =&gt; $linksBlockType-&gt;id,
                 'enabled' =&gt; true,
                 'fields' =&gt; array(
                     'linkType' =&gt; (array_key_exists('type', $link) ? $link['type'] : ''),
                     'linkUrl' =&gt; (array_key_exists('url', $link) ? $link['url'] : ''),
                 ),
             );
             $l++;
         }
     }

     $performancesMatrix['new'.$i] = array(
         'type' =&gt; 'performance',
         'enabled' =&gt; true,
         'fields' =&gt; array(
             'performanceDate' =&gt; date_create($performance['ts']),
             'duration' =&gt; (array_key_exists('duration', $performance) ? $performance['duration'] / 60 : ''),
             'tickets' =&gt; $ticketsMatrix,
              'performanceLinks' =&gt; $linksMatrix
         ),
     );
     $i++;
 }

$entry-&gt;setFieldValue('eventPerformances', $performancesMatrix);