```ruby
require 'active_support/all'
require 'poms/api/media'
require 'poms/errors/authentication_error'
require 'json'

# Main interface for the POMS gem
module Poms
  extend self
  attr_reader :config

  def configure
    @config ||= OpenStruct.new
    yield @config
  end

  def fetch(arg)
    assert_credentials
    if arg.is_a?(Array)
      request = Poms::Api::Media.multiple(arg, config)
    elsif arg.is_a?(String)
      request = Poms::Api::Media.from_mid(arg, config)
    else
      raise 'Invalid argument passed to Poms.fetch. '\
        'Please make sure to provide either a mid or an array of mid'
    end
    JSON.parse(request.get.body)
  end

  private

  def assert_credentials
    raise Errors::AuthenticationError, 'API key not supplied'    if config.key.blank?
    raise Errors::AuthenticationError, 'API secret not supplied' if config.secret.blank?
    raise Errors::AuthenticationError, 'Origin not supplied'     if config.origin.blank?
  end
end
```

Add descendants entrypoint for the gems main api
user
```ruby
require 'active_support/all'
require 'poms/api/media'
require 'poms/api/search'
require 'poms/errors/authentication_error'
require 'json'

# Main interface for the POMS gem
#
# Strategy
# 1 -- Build a request object that can be executed (PostRequest || GetRequest object)
# 2 -- Execute the request. Retry on failures (max 10?)
# 3 -- Parse responded JSON. Extract fields if necessary
module Poms
  extend self
  attr_reader :config

  def configure
    @config ||= OpenStruct.new
    yield @config
  end

  def fetch(arg)
    assert_credentials
    request = Api::Media.multiple(Array(arg), config)
    Json.parse(request.execute.body)
  end

  def descendants(mid, search_params)
    assert_credentials
    request = Api::Media.descendants(mid, config, search_params)
    JSON.parse(request.execute.body)
  end

  private

  def assert_credentials
    raise Errors::AuthenticationError, 'API key not supplied'    if config.key.blank?
    raise Errors::AuthenticationError, 'API secret not supplied' if config.secret.blank?
    raise Errors::AuthenticationError, 'Origin not supplied'     if config.origin.blank?
  end
end
```
assistant