Drupal commerce price markup field I need to calculate product sell price as gross price * markup (i.e. 1.4) Gross price is stored in field_data_commerce_price table (standard commerce price field). Markup value should be associated with every single product, so I can manage it with views using filters and VBO. I have many product types, so maually created markup field is not a good solution.

Is there any out-of-the-box solution?

and if not:

What is the best way to add new product field using API? (should be added by default for all product types)
If you need a per product price modificator, your best solution is to have a field with this information, you can probably use a normal numeric field for this purpose.

You've got many examples on how to create a field using the API, for example, drupal commerce itself adds a price field every time a product type is generated by using hook_modules_enabled hook.

/**
 * Implements hook_modules_enabled().
 */
function commerce_product_modules_enabled($modules) {
  commerce_product_configure_product_fields($modules);
}


Then in this function

function commerce_product_configure_product_fields($modules = NULL) {
(...)
      // Loop through and configure the product types defined by the module.
      foreach ($product_types as $type =&gt; $product_type) {
        commerce_product_configure_product_type($type);
      }


Next

/**
 * Ensures a base price field is present on a product type bundle.
 */
function commerce_product_configure_product_type($type) {
  commerce_price_create_instance('commerce_price', 'commerce_product', $type, t('Price'), 0, 'calculated_sell_price');
}


And finally 

function commerce_price_create_instance($field_name, $entity_type, $bundle, $label, $weight = 0, $calculation = FALSE, $display = array()) {
  // Look for or add the specified price field to the requested entity bundle.
  commerce_activate_field($field_name);
  field_cache_clear();

  $field = field_info_field($field_name);
  $instance = field_info_instance($entity_type, $field_name, $bundle);

  if (empty($field)) {
    $field = array(
      'field_name' =&gt; $field_name,
      'type' =&gt; 'commerce_price',
      'cardinality' =&gt; 1,
      'entity_types' =&gt; array($entity_type),
      'translatable' =&gt; FALSE,
      'locked' =&gt; TRUE,
    );
    $field = field_create_field($field);
  }

  if (empty($instance)) {
    $instance = array(
      'field_name' =&gt; $field_name,
      'entity_type' =&gt; $entity_type,
      'bundle' =&gt; $bundle,

      'label' =&gt; $label,
      'required' =&gt; TRUE,
      'settings' =&gt; array(),

      // Because this widget is locked, we need it to use the full price widget
      // since the currency option can't be adjusted at the moment.
      'widget' =&gt; array(
        'type' =&gt; 'commerce_price_full',
        'weight' =&gt; $weight,
        'settings' =&gt; array(
          'currency_code' =&gt; 'default',
        ),
      ),

      'display' =&gt; array(),
    );

    $entity_info = entity_get_info($entity_type);

    // Spoof the default view mode and node teaser so its display type is set.
    $entity_info['view modes'] += array(
      'default' =&gt; array(),
      'node_teaser' =&gt; array(),
    );

    foreach ($entity_info['view modes'] as $view_mode =&gt; $data) {
      $instance['display'][$view_mode] = $display + array(
        'label' =&gt; 'hidden',
        'type' =&gt; 'commerce_price_formatted_amount',
        'settings' =&gt; array(
          'calculation' =&gt; $calculation,
        ),
        'weight' =&gt; $weight,
      );
    }

    field_create_instance($instance);
  }
}


So you in summary can use hook_modules_enabled to react and loop the product types and create your field and instance. Another examples of this procedure can be found in commerce recurring, commerce discount, commerce coupon and more.