How to obtain the machine name and field type of the fields of a content type filtered by those created by the user?
If you mean the fields configurable in UI, then you can get them through EntityFieldManager::getFieldDefinitions:

$fields = array_filter(
  \Drupal::service('entity_field.manager')-&gt;getFieldDefinitions('node', 'article'),
  function ($fieldDefinition) {
    return $fieldDefinition instanceof \Drupal\field\FieldConfigInterface;
  }
);

$result = [];
foreach ($fields as $key =&gt; $definition) {
  $result[$key] = [
    'type' =&gt; $definition-&gt;getType(),
  ];
  // if the field is a reference field get also the target entity type
  if (in_array($result[$key]['type'], ['entity_reference', 'entity_reference_revisions'])) {
    $result[$key]['target_type'] = $definition-&gt;getSettings()['target_type'];
  }
}


Entities have base fields defined in code and bundle fields defined in configuration. Drupal doesn't keep track whether a bundle field is configured by you or is from another source. A field can be pre-installed by a module, then deleted and added in UI again and Drupal wouldn't be able to tell the difference.