Hook menu url giving access denied for post method but working for get method
your code works for me:

Try to move watchdog before return if there is any exception, will log into your report log.
Change your function to like this:

function mymodule_api_return_aid_program() {
  try {
    // Fetching the primary parameters
    //product code
    $product = $_POST['product'];
    //country code
    $country = $_POST['country'];
    // language code
    $language = $_POST['language'];
    // age
    //citizenship
    // veteran_status
    $values = _find_product_specific_to_country($product, $country);
    return array('message' =&gt; array('nodes' =&gt; $values));
  } catch (Exception $e) {
    watchdog('mymodule', 'Aid API ERROR ' . $e-&gt;getMessage(), array(), WATCHDOG_NOTICE, NULL);
    return array('status' =&gt; FALSE, 'message' =&gt; $e-&gt;getMessage());
  }
}


Update: debug
Getting access denied maybe another module add/alter your menu and add another access arguments then access content so in your callback function print you menu object and see something like :

  $menu_item = menu_get_item('api/json/select/programs');
  // print the menu array
  print_r($menu_item);
  // Print access arguments
  print_r($menu_item['access_arguments']);
  // Print access callback
  print_r($menu_item['access_callback']);