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 |
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 |
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/dimensions |
https://api.mmx.io/ |
Headers
Include the following required header (more on authentication):
Key | Value |
---|---|
Authorization |
Bearer |
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" } ]