How to get the new record ID, when adding a record to a multi-value custom field using the API?
I don't think it's possible using the api right now. 

So what you could do in the mean time is create a custom function to do it and ideally emulate the api call using the same input params and output so you can replace it with an api call when the api is fixed.

Not tested but should look like :

function insertCustomValue($params) {

  // prepare input params
  $dummy = explode('_', $params['field']);
  $cfId = $dummy[1];
  $cfValue = $params['value'];
  $entityId = $params['entity_id'];

  // get table name and column name
  $cf = civicrm_api3('CustomField', 'getsingle', array('id' =&gt; $cfId));
  $table_name = civicrm_api3('CustomGroup', 'getvalue', array(
    'id' =&gt; $cf['custom_group_id'], 
    'return' =&gt; 'table_name')
  );
  $column_name = $cf['column_name'];

  // insert the new value in the database
  $sql = "INSERT INTO $table_name (entity_id, $column_name) values (%1, %2)";
  $dao = CRM_Core_DAO::executeQuery($sql, array(
    1 =&gt; array($entityId, 'Integer'), 
    2 =&gt; array($cfValue, 'String')
  ));

  // get and return the id of the new row
  $cfId = CRM_Core_DAO::singleValueQuery('SELECT LAST_INSERT_ID()');
  return array(
    'is_error' =&gt; 0,
    'count' =&gt; 1,
    'values' =&gt; array(
      'id' =&gt; $cfId,
    )
  );

}


But of course you could also help fix the api which would be better :)