API Introduction

The Metamarkets API is simple, so you don’t have a lot to learn before you can be productive. Start on this page to understand some high-level concepts and make your first request.


The Metamarkets API is a stateless, HTTP API with JSON-formatted requests and responses. Each request requires an authentication token, and a correctly-formatted request body. Some key information you need about these calls is in this section.

HTTP connection details

API requests are made using HTTPS to URLs that begin with https://api.mmx.io. SSL is required. All API calls use the HTTP POST method.

Data formats and compression

The body of your API request should be a single JSON object with all required parameters. The examples in this guide format the JSON with generous spacing; that is not required in your requests.

We optionally support compressed requests and responses using the Content-Encoding
and Accept-Encoding headers with the ‘gzip’ format.

For example:

  Content-Encoding: gzip
  Accept-Encoding: gzip

This can increase the efficiency of your data transfers. It does not affect pricing.


Each query involves several types of data object. These are:

Parameter Description
A data view This is the data view (which includes a data source, and a schema) that you will query. Most customers have access to just a few data views. For example, if you are at an advertising exchange, you may have one data view for auctions data, and another for bids data.
One or more metrics These are values which we will sum or average to give you information about your data. Metrics are identified by unique metric IDs, which are defined as part of the data view. Some example metric IDs are revenue, bids, impressions, or clicks.
One or more dimensions These describe your data in more detail. Dimension are identified by unique dimension IDs, which are defined as part of your data view. Some example dimension IDs for a particular data view are app, site, ad_size, country, publisher, and advertiser.
An interval This defines the period of time to query. Events within that interval will be summarized in the response supply in your request. Interval specifications follow the ISO 8601 standard. See detailed information in the API reference.

Getting an API token

All Metamarkets API requests require authentication with an API token. If you have a Metamarkets account and have purchased API access, visit your API setup page to customize the documentation and data access. We don’t currently offer test access, but plan to in the future. (Talk to your account manager for details.)

Tokens are JSON Web Tokens (JWT). Present them as an Authorization header as follows:

  Authorization: Bearer <token>

We offer a wide range of capabilities and control via API tokens. You can even generate new tokens programmatically if required. See the API reference docs for more details.


You will get the latest production version of the API by default. However, you can, if you wish, specify the particular version to use. See the API reference for more details.


Successful API requests will receive an HTTP 200 response status code. Invalid requests will receive an HTTP 4xx response status code, and errors on our end will have an HTTP 5xx response status code. All errors with a 4xx or 5xx response code will include a JSON error message response of the form:

{ "message": "More detailed description of the problem" }

See the API Errors Reference for detailed information about possible error codes and what they may mean.

Rate limits

Our API has limits on the rates and complexity of permitted requests. These vary depending on your account type and status. Contact your account manager for detailed information about rate limits and what to do if you wish to increase your API usage beyond an applicable limit. (We will be adjusting these during the beta period.)

Your first request

Now that we have introduced you to the concepts, let’s go through your first call to the Metamarkets API. We will request a single metric total. For this example, we will be working with the data view demoexchange/explore, which is a Metamarkets-internal synthetic data source. (You will need to use your own data view.)

The query choice means our HTTP method and route will be:

POST https://api.mmx.io/query/summary

It also gives us a parameter for the body:

dataView: "demoexchange/explore"

First, get an API key. You need to be a Metamarkets user (and a direct customer). Visit the API configuration page within our product, and generate a new token. You will present this token as an Authorization header.

This gives us a header (replace the eyJ0e... portion with your own key):

Authorization: Bearer eyJ0eXAiOiJKV1Qi...

While many programming toolkits will add a Content-Type header by default, if you are hand-rolling your request you will also need to add:

Content-Type: application/json

Next, we will choose the period of time we wish to query. This determines the ‘interval’ parameter. We will make a query over the most recent week of data. This gives us a parameter for the body:

interval: "P1W"

We choose to retrieve a count for the impressions metric, which gives us the final parameter for the body. We will provide a single item for the list of desired metrics:

metrics: ["imp_cnt"]

That’s it! Our final JSON body looks like this:

  "dataView": "demoexchange/explore",
  "metrics": ["imp_cnt"],
  "interval": "P1W"

When we make the call, we get back the following response:

  "imp_cnt": 1602465,
  "timerange": {
    "start": "2016-05-18T20:00:00.000Z",
    "end": "2016-05-25T20:00:00.000Z"

This gives us the answer we wanted: there were 1,602,465 impressions for the week beginning May 18, 2016. You’ve now completed your first Metamarkets API request!