How to search on multiple (custom) fields using Element API
In your last example:
$criteria = [
    'section' =&gt; $section_handle, 
    'excerpt' =&gt; &quot;*{$q}*&quot;
];

You are making a fuzzy search by surrounding your keyword(s) with * (see docs for syntaxes) and I wonder if that's why you are seeing results (I'd need to see the keywords/entry).
However, if that works, then this should work for you:
'criteria' =&gt; [
    'section' =&gt; $section_handle,
    'search' =&gt; ($q ? 'title:' . $q . ' OR '.'excerpt:*'. $q . '*' : null),
],

Alternatively, make everything fuzzy (not as precise):
'criteria' =&gt; [
    'section' =&gt; $section_handle,
    'search' =&gt; ($q ? 'title:*' . $q . '* OR '.'excerpt:*'. $q . '*' : null),
],

One final thought, if your section has three fields, if you only check Use this field’s values as search keywords on your Settings → Fields → excerpt field then you can search on both title + excerpt simply by doing:
'criteria' =&gt; [
    'section' =&gt; $section_handle,
    'search' =&gt; ($q ?? null),
],