Drupal Field API - Settings List
After viewing the HTML source to get key/value pairs I've managed to do something similar to the above with the following code:

&lt;?php
/**
 * Implements hook_enable().
 *
 * Create a field. Fields can be created without any needs to attach them to
 * entities.
 */
function youtube_carousel_enable() {
  $field = array(
    'field_name' =&gt; 'ytcarousel_field',
    'type' =&gt; 'link_field',
    'cardinality' =&gt; -1
  );
  field_create_field($field);


  /**
  * Bind field to a entity bundle.
  */
  $instance = array(
    'field_name' =&gt; $field['field_name'],
    'entity_type' =&gt; 'node',
    'bundle' =&gt; 'homepage',
    'label' =&gt; 'YouTube Video',
    'settings' =&gt; array('title' =&gt; 'required')
  );
  field_create_instance($instance);
}

/**
 * Implements hook_disable().
 *
 * Remove field from node bundle (content type) and then delete the field.
 */
function youtube_carousel_disable() {
  $instance = array(
    'field_name' =&gt; 'ytcarousel_field',
    'entity_type' =&gt; 'node',
    'bundle' =&gt; 'homepage',
    'label' =&gt; 'YouTube Video',
    'settings' =&gt; array('title' =&gt; 'required')
  );
  field_delete_instance($instance);
  field_delete_field($instance['field_name']);
  print 'Removed ' . $instance['field_name'] . "\n";
}
?&gt;


The cardinality controls have many instances the value can have, "-1" is unlimited. 

'cardinality' =&gt; -1


The title attribute is controlled via the instance not the field itself, I believe, and it uses text based values rather than numeric. 

'settings' =&gt; array('title' =&gt; 'required')