Metadata queries

Use metadata queries to retrieve schema details (metadata) about the API data available from our API. There are three metadata queries: one lists the available data views for your account; the second lists the metrics available for a given datasource, and the third lists the dimensions available for a given datasource.

Data views

Use this call to retrieve a list of data views available to you. This API call is one of the few where you do not specify a `dataview`.

Limits

No size limits apply to this call. Each call counts as one API query.

Endpoint

Make the query as follows:

HTTP method Query Endoint Base URL
POST /metadata/dataviews https://api.mmx.io/

Headers

Include the following required header (more on authentication):

Key Value
Authorization Bearer <API key>
Content-Type application/json

Parameters

There are no parameters for this call.

Response

The response will consist of a single array of strings. Each string is the ID of a data view you can query. (See also the schema explorer, which provides this list as a drop-down to explore.)

Example request code


# Run 'gem install rest-client' before running this script.
require 'rest-client'; require 'json'; require 'pp'
url = "https://api.mmx.io/metadata/dataviews"

# Adjust this block for your token, data view and query setup.
token = ENV['TOKEN']  # Replace with your token, or set an environment variable.
body = {}
# (No edits required below here.)

# Prepare and make the request, and respond to any errors.
headers = {Authorization: "Bearer " + token, content_type: :json, accept: :json}
begin
  response = RestClient.post(url, body.to_json, headers)
rescue RestClient::Exception => e
  puts e.response
else
  # Display the successful result.
  pp JSON.load response
end
export TOKEN="your token here"
curl -v \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/json" \
  -d '{}' \
  https://api.mmx.io/metadata/dataviews
# Run 'easy_install requests' before running this script.
import requests, os

# Adjust this block for your token, data view and query setup.
token = os.environ['TOKEN'] # Replace this, or set an environment variable.
url = "https://api.mmx.io/metadata/dataviews"
body = {}

# Prepare and make the request.
headers = {"Authorization": "Bearer " + token}
response = requests.post(url, json=body, headers=headers)

# Respond to the result:
if response.status_code == 200:
  print response.json()
else:
  print response.text
  raise Exception, "API query failed"
// Adjust this block for your token, data view and query setup.
var token = "eyJ0eXAiOiJKV1Qi..."; // Replace this with your token.
var url = "https://api.mmx.io/metadata/dataviews";
var body = {};
// (No edits required below here.)

// Prepare the request.
var request = new XMLHttpRequest();
request.open("POST", url);
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Authorization', 'Bearer ' + token);

// Respond to the result:
request.onreadystatechange = function (xhr) {
  if (this.readyState === 4) {
    xhr = this;
    if (xhr.status == 200) {
      response = JSON.parse(xhr.response);
      // Just print out the result for now:
      console.log(response);
    } else {
      console.log(xhr.response);
      throw "API query failed"
    }
  }
};

// Make the request:
request.send(JSON.stringify(body));

Example response


[
  "demo_dsp\/explore_bids",
  "demo_exchange\/explore",
  "demo_exchange\/explore_bids"
]

Metrics

Use this call to retrieve a list of metrics available for a given data view. For each metric, you will get both an ID, and a title suitable for display.

Limits

No size limits apply to this call. Each call counts as one regular API query.

Endpoint

Make the query as follows:

HTTP method Query Endoint Base URL
POST /metadata/metrics https://api.mmx.io/

Headers

Include the following required header (more on authentication):

Key Value
Authorization Bearer <API key>
Content-Type application/json

Parameters

Include the following parameters:

Parameter Type Description
dataView String (required) The data view ID to query

Response

The response will consist of an array of objects: one for each metric available for the given data view. Each object will have an `id` that gives the metric ID to use in other API calls, and a `title` that gives a human-readable title for the metric. This data is also available for exploration in the Schema Explorer.

Example request code


# Run 'gem install rest-client' before running this script.
require 'rest-client'; require 'json'; require 'pp'
url = "https://api.mmx.io/metadata/metrics"

# Adjust this block for your token, data view and query setup.
token = ENV['TOKEN']  # Replace with your token, or set an environment variable.
body = {
  dataView: "demo_exchange/explore"
}
# (No edits required below here.)

# Prepare and make the request, and respond to any errors.
headers = {Authorization: "Bearer " + token, content_type: :json, accept: :json}
begin
  response = RestClient.post(url, body.to_json, headers)
rescue RestClient::Exception => e
  puts e.response
else
  # Display the successful result.
  pp JSON.load response
end
export TOKEN="your token here"
curl -v \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/json" \
  -d '{
    "dataView": "demo_exchange/explore"}' \
  https://api.mmx.io/metadata/metrics
# Run 'easy_install requests' before running this script.
import requests, os

# Adjust this block for your token, data view and query setup.
token = os.environ['TOKEN'] # Replace this, or set an environment variable.
url = "https://api.mmx.io/metadata/metrics"
body = {
  "dataView": "demo_exchange/explore"
}

# Prepare and make the request.
headers = {"Authorization": "Bearer " + token}
response = requests.post(url, json=body, headers=headers)

# Respond to the result:
if response.status_code == 200:
  print response.json()
else:
  print response.text
  raise Exception, "API query failed"
// Adjust this block for your token, data view and query setup.
var token = "eyJ0eXAiOiJKV1Qi..."; // Replace this with your token.
var url = "https://api.mmx.io/metadata/metrics";
var body = {
  "dataView": "demo_exchange/explore"
};
// (No edits required below here.)

// Prepare the request.
var request = new XMLHttpRequest();
request.open("POST", url);
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Authorization', 'Bearer ' + token);

// Respond to the result:
request.onreadystatechange = function (xhr) {
  if (this.readyState === 4) {
    xhr = this;
    if (xhr.status == 200) {
      response = JSON.parse(xhr.response);
      // Just print out the result for now:
      console.log(response);
    } else {
      console.log(xhr.response);
      throw "API query failed"
    }
  }
};

// Make the request:
request.send(JSON.stringify(body));

Example response


[
  {
    "id": "auction_cnt",
    "title": "Auctions"
  },
  {
    "id": "total_revenue",
    "title": "Gross Revenue"
  },
  {
    "id": "imp_cnt",
    "title": "Impressions"
  },
  {
    "id": "delivery_rate",
    "title": "Delivery Rate"
  },
  {
    "id": "ecpm",
    "title": "eCPM"
  },
  {
    "id": "win_cnt",
    "title": "Winning Bids"
  },
  {
    "id": "win_rate",
    "title": "Win Rate"
  },
  {
    "id": "bid_cnt",
    "title": "Total Bids"
  },
  {
    "id": "avg_price_floor",
    "title": "Avg. Price Floor"
  },
  {
    "id": "avg_bid_price",
    "title": "Avg. Bid Price"
  },
  {
    "id": "avg_latency",
    "title": "Avg. Imp Latency"
  },
  {
    "id": "avg_bid_depth",
    "title": "Avg. Bid Depth"
  },
  {
    "id": "competitive_factor",
    "title": "Competitive Factor"
  },
  {
    "id": "avg_win_bid",
    "title": "Avg Win Bid"
  },
  {
    "id": "clear_rate",
    "title": "Clear Rate"
  },
  {
    "id": "click_cnt",
    "title": "Clicks"
  },
  {
    "id": "ctr",
    "title": "CTR"
  },
  {
    "id": "uniques",
    "title": "Uniques"
  },
  {
    "id": "views",
    "title": "Views"
  },
  {
    "id": "completes",
    "title": "Completes"
  },
  {
    "id": "fill_rate",
    "title": "Fill Rate"
  },
  {
    "id": "completion_rate",
    "title": "Completion Rate"
  }
]

Dimensions

Use this call to retrieve a list of dimensions available for a given data view. For each dimension, you will get both an ID, and a title suitable for display.

Limits

No size limits apply to this call. Each call counts as one regular API query.

Endpoint

Make the query as follows:

HTTP method Query Endoint Base URL
POST /metadata/metrics https://api.mmx.io/

Headers

Include the following required header (more on authentication):

Key Value
Authorization Bearer <API key>
Content-Type application/json

Parameters

Include the following parameters:

Parameter Type Description
dataView String (required) The data view ID to query

Response

The response will consist of an array of objects: one for each metric available for the given data view. Each object will have an `id` that gives the metric ID to use in other API calls, and a `title` that gives a human-readable title for the metric. This data is also available for exploration in the Schema Explorer.

Example request code


# Run 'gem install rest-client' before running this script.
require 'rest-client'; require 'json'; require 'pp'
url = "https://api.mmx.io/metadata/dimensions"

# Adjust this block for your token, data view and query setup.
token = ENV['TOKEN']  # Replace with your token, or set an environment variable.
body = {
  dataView: "demo_exchange/explore"
}
# (No edits required below here.)

# Prepare and make the request, and respond to any errors.
headers = {Authorization: "Bearer " + token, content_type: :json, accept: :json}
begin
  response = RestClient.post(url, body.to_json, headers)
rescue RestClient::Exception => e
  puts e.response
else
  # Display the successful result.
  pp JSON.load response
end
export TOKEN="your token here"
curl -v \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/json" \
  -d '{
    "dataView": "demo_exchange/explore"}' \
  https://api.mmx.io/metadata/dimensions
# Run 'easy_install requests' before running this script.
import requests, os

# Adjust this block for your token, data view and query setup.
token = os.environ['TOKEN'] # Replace this, or set an environment variable.
url = "https://api.mmx.io/metadata/dimensions"
body = {
  "dataView": "demo_exchange/explore"
}

# Prepare and make the request.
headers = {"Authorization": "Bearer " + token}
response = requests.post(url, json=body, headers=headers)

# Respond to the result:
if response.status_code == 200:
  print response.json()
else:
  print response.text
  raise Exception, "API query failed"
// Adjust this block for your token, data view and query setup.
var token = "eyJ0eXAiOiJKV1Qi..."; // Replace this with your token.
var url = "https://api.mmx.io/metadata/dimensions";
var body = {
  "dataView": "demo_exchange/explore"
};
// (No edits required below here.)

// Prepare the request.
var request = new XMLHttpRequest();
request.open("POST", url);
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Authorization', 'Bearer ' + token);

// Respond to the result:
request.onreadystatechange = function (xhr) {
  if (this.readyState === 4) {
    xhr = this;
    if (xhr.status == 200) {
      response = JSON.parse(xhr.response);
      // Just print out the result for now:
      console.log(response);
    } else {
      console.log(xhr.response);
      throw "API query failed"
    }
  }
};

// Make the request:
request.send(JSON.stringify(body));

Example response


[
  {
    "id": "pub_name",
    "title": "Publisher",
    "titlePlural": "Publisher"
  },
  {
    "id": "app_site_cat_id",
    "title": "App Category",
    "titlePlural": "App Category"
  },
  {
    "id": "advertiser_cat",
    "title": "User Segment",
    "titlePlural": "User Segment"
  },
  {
    "id": "bidder_name",
    "title": "Bidder\/DSP Name",
    "titlePlural": "Bidder\/DSP Name"
  },
  {
    "id": "ad_size",
    "title": "Ad Size",
    "titlePlural": "Ad Size"
  },
  {
    "id": "auction_outcome",
    "title": "Auction Outcome",
    "titlePlural": "Auction Outcome"
  },
  {
    "id": "auction_type",
    "title": "Auction Type",
    "titlePlural": "Auction Type"
  },
  {
    "id": "app_site_name",
    "title": "App\/Site Name",
    "titlePlural": "App\/Site Name"
  },
  {
    "id": "app_or_site",
    "title": "App or Site",
    "titlePlural": "App or Site"
  },
  {
    "id": "device_os",
    "title": "Device OS",
    "titlePlural": "Device OS"
  },
  {
    "id": "has_device_id",
    "title": "Has Device ID",
    "titlePlural": "Has Device ID"
  },
  {
    "id": "bid_floor_bucket",
    "title": "Price Floor Bucket",
    "titlePlural": "Price Floor Bucket"
  },
  {
    "id": "campaign_id",
    "title": "Winner Campaign ID",
    "titlePlural": "Winner Campaign ID"
  },
  {
    "id": "adomain",
    "title": "Adomain",
    "titlePlural": "Adomain"
  },
  {
    "id": "advertiser",
    "title": "Advertiser",
    "titlePlural": "Advertiser"
  },
  {
    "id": "ad_position",
    "title": "Ad Position",
    "titlePlural": "Ad Position"
  },
  {
    "id": "deal_id",
    "title": "Deal ID",
    "titlePlural": "Deal ID"
  },
  {
    "id": "user_gender",
    "title": "Gender",
    "titlePlural": "Gender"
  },
  {
    "id": "user_age",
    "title": "User Age",
    "titlePlural": "User Age"
  },
  {
    "id": "country_id",
    "title": "Country",
    "titlePlural": "Country"
  },
  {
    "id": "location_type",
    "title": "Location Type",
    "titlePlural": "Location Type"
  },
  {
    "id": "device_make",
    "title": "Device Make",
    "titlePlural": "Device Make"
  },
  {
    "id": "device_model",
    "title": "Device Model",
    "titlePlural": "Device Model"
  },
  {
    "id": "api_frameworks",
    "title": "Device Carrier",
    "titlePlural": "Device Carriers"
  },
  {
    "id": "user_id_types",
    "title": "User ID Type",
    "titlePlural": "User ID Types"
  },
  {
    "id": "account_manager",
    "title": "Account Manager",
    "titlePlural": "Account Manager"
  },
  {
    "id": "ad_type",
    "title": "Banner or Video",
    "titlePlural": "Banner or Video"
  },
  {
    "id": "video_completion",
    "title": "Video Completion",
    "titlePlural": "Video Completion"
  },
  {
    "id": "video_protocols",
    "title": "Video Protocols",
    "titlePlural": "Video Protocols"
  },
  {
    "id": "video_playback",
    "title": "Video Playback",
    "titlePlural": "Video Playback"
  },
  {
    "id": "video_delay",
    "title": "Video Delay",
    "titlePlural": "Video Delay"
  },
  {
    "id": "volume",
    "title": "Video Length",
    "titlePlural": "VideoLength"
  },
  {
    "id": "video_skip",
    "title": "Video Skip",
    "titlePlural": "Video Skip"
  },
  {
    "id": "video_delivery",
    "title": "Video Delivery",
    "titlePlural": "Video Delivery"
  },
  {
    "id": "macro_region",
    "title": "Macro Region",
    "titlePlural": "Macro Region"
  }
]