Dynamic form fields using #states array on empty select field
Maybe you can try to add an id to your select field

$form['api_title_filter_widget']['api_title'] = [
  '#type' =&gt; 'select',
  '#title' =&gt; 'API Title',
  '#default_value' =&gt; $api,
  '#options' =&gt; ["" =&gt; "- Select -"] + $published_api_proxies,
  '#ajax' =&gt; [
    'event' =&gt; 'change',
    'callback' =&gt; 'callback_api_product_filter',
    'method' =&gt; 'replace',
    'wrapper' =&gt; 'api_products_controlled_by_filter',
  ],
  '#attributes' =&gt; [
    'id' =&gt; 'my_api_title'
  ],
];


Then you should be able to target it through its id :

$form['api_product']['#states'] = [
  'visible' =&gt; [
    ':select[id="my_api_title"]' =&gt; ['filled' =&gt; TRUE],
  ],
];