…in the meantime, there is my workaround using a raw API call:
$opportunity = $isoft->opportunities()->create([
'opportunity_title' => $data['opportunityTitle'],
'opportunity_notes' => $data['opportunityNotes'],
'contact' => [
'id' => $data['contactId'],
'email' => $data['email'],
'phone_number' => $data['phone']
],
'stage' => [
'id' => 123
]
]);
// $http here refers to GuzzlePHP, but any http client will work
$http->request(
'PATCH',
"https://api.infusionsoft.com/crm/rest/v1/opportunities/{$opportunity->id}",
[
'headers' => [
'Authorization' => "Bearer {$isoftToken}"
],
'json' => ['user' => [
'id' => $opportunityOwnerId
]]
]
);