Logo

What are you looking for?

Get help straight from our team...

Advanced Reporting API

General Questions

Advanced Reporting API

Last updated on 19 Jan, 2026

Sulvo offers an Advanced Reporting API

Users can get ad performance information by logging into Surge and using its UI or using Advances Reports for receiving additional data through CSV reports. However, Sulvo also offers a Reporting API (application programming interface) as an alternative for receiving the same data without accessing the UI.

 

Authentication (API key)

The Reporting API uses keys to authenticate requests. Users can get and manage their keys in Surge under the API Key section of My Account. All of the following operations are done there.

For developers: all the operations with API keys are done on the /api/me/api-key url.

An API key is a string of text which you must attach to any request made to the API. It works similarly to a physical key in that it gives a user access to his or her reports. It looks like this:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2eWE0N2FoREUyQzk0WlJ4aSIsImFjY291bnRJZCI6IjVlOWYxZTkxNTMyNGRlMjIzMmI5NWJhZSIsImFwaUtleUlkIjoxfQ.38AnpOavKs9l_QTmMVIjSN0InKSjTRCezSDoBrvb7GY

A user can start using the API by generating a key and disable the feature by deleting the key. Each account can have only one key and the key is valid for any request made to the API as long as the key is active

An API Key is only valid for the HTTP requests described in this document, and only provides data for the domains the account has access to. All the API requests use the GET method and are read-only, the API does not allow write-access or permissions changes.

Step 1: Generate an API Key

To start using it, a user must first generate an API Key by clicking the Generate new key button in My Account.

This will generate a new key and return its value. 

Step 2: Get the API key

Once you have generated a key you should keep the key secure. The API is available as soon as the key is generated.

Re-generate API key

If you lose your key or the key security is compromised you should re-generate a new key.

After re-generating the key, a user should replace it where he has been using the other one as soon as possible, otherwise, the requests to the API will start to fail. There is a two-hour window in which you can still use the old one. This gives ample time to replace keys without disrupting their systems. After that time has passed, the old key will no longer be valid.

Delete API key

You can delete the API key when you will no longer be using the API. No key will be valid after this until a new key is generated.

 

API Reference


Ad Units

Returns the available Ad Inventory for a publisher, meaning all the domains they manage and their associated ad units.

This is a fundamental request and should be the first one used when working with the API as it gives a full list of the units the user is getting information about. All the reports will refer to these units and most of the requests can be configured to show data about individual domains or units, giving a great deal of flexibility and maximizing its utility.


HTTP Request

GET /api/v1/inventory/ad-units-by-domain


Required Parameters

  • None


Optional Parameters

  • None


Example Request

curl https://surge.sulvo.com/api/v1/inventory/ad-units-by-domain
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": [
    {
      "domain": "example.com",
      "adRoots": [ "example.com_responsive_h", "example.com_sticky_mobile"]
    },
    {
      "domain": "mydomain.com",
      "adRoots": [ "mydomain.com_sticky_desktop", "mydomain.com__responsive_v"]
    }
  ]
}

 

Performance By Date

Returns a list of reports within a range of dates for the selected ad units (all by default) divided and ordered by date.

Each report includes the following aggregated metrics for a single day:

  • Impressions

  • Requests

  • Earnings

  • Clickthrough Rate (CTR)

  • Viewable Cost Per Mille (vCPM)


HTTP Request

GET /api/v1/reports/by-date?start=<start>&end=<end>&domains=<domains>&adRoots=<adRoots>


Required Parameters

  • start: a date the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date the end of the range in UTC with the ISO 8601 format YYYY-MM-DD


Optional Parameters

  • domains: a list of domains separated by commas (without spaces)

  • adRoots: a list of ad roots separated by commas (without spaces)


Example Request

curl https://surge.sulvo.com/api/v1/reports/by-date?start=2020-01-01&end=2020-01-02&domains=mydomain.com&adRoots=example.com_sticky_mobile
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": [
    {
      "date": "2020-01-01T07:00:00.000Z",
      "impressions": 33232,
      "earnings": 21.67,
      "adRequests": 43351,
      "ctr": 0.0235,
      "vcpm": 0.44
    },
    {
      "date": "2020-01-02T07:00:00.000Z",
      "impressions": 258613,
      "earnings": 86.38,
      "adRequests": 328700,
      "ctr": 0.0239,
      "vcpm": 0.46
    },
  ]
}

 

Performance By Domain and Ad Unit

Returns a list of reports within a range of dates for the selected ad units (all by default) divided and domain and ad unit.

Each report includes the following aggregated metrics of all the selected ad-units of a single domain (as aggregates), and then a list with the same metrics for each ad unit individually:

  • Impressions

  • Requests

  • Earnings

  • Clickthrough Rate (CTR)

  • Average View Viewable (AVV)

  • Average View Time (AVT)

Also, for each ad unit the following data is included:

  • Title and textual description

  • Viewable Cost Per Mille (vCPM) for the whole ad unit

  • Earnings, Cost Per Mille (CPM) and vCPM divided in 2 segments

  • A percentage comparison between segments' earnings named eBar


HTTP Request

GET /api/v1/reports/by-domain-and-ad-unit?start=<start>&end=<end>&domains=<domains>&adRoots=<adRoots>


Required Parameters

  • start: a date indicating the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date indicating the end of the range in UTC with the ISO 8601 format YYYY-MM-DD


Optional Parameters

  • domains: a list of domains separated by comas (without spaces)

  • adRoots: a list of ad roots separated by comas (without spaces)


Example Request

curl https://surge.sulvo.com/api/v1/reports/by-domain-and-ad-unit?start=2020-01-01&end=2020-01-02&domains=mydomain.com&adRoots=mydomain.com_sticky_desktop
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": [
    {
      "domain": "mydomain.com",
      "totals": {
        "earnings": 212.17,
        "impressions": 52399,
        "adRequests": 60485,
        "avv": 0.3294,
        "avt": 7.6,
        "ctr": 0.0166
      },
      "ads": [
        {
          "domain": "mydomain.com",
          "adRoot": "mydomain.com_sticky_desktop",
          "title": "Sticky Desktop",
          "description": "A sticky ad for desktop",
          "earnings": 212.17,
          "impressions": 52399,
          "adRequests": 60485,
          "avv": 0.3294,
          "avt": 7.6,
          "ctr": 0.0166,
          "vcpm": 2.41,
          "segments": [
            {
              "earnings": 102.18,
              "cpm": 1.42,
              "vcpm": 1.39,
              "eBar": 21.80
            },
            {
              "earnings": 109.99,
              "cpm": 3.11,
              "vcpm": 3.43,
              "eBar": 100.00
            }
          ]
        }
      ]
    }
  ]
}

 

Performance By Date and Ad Unit

Returns a list of reports within a range of dates for the selected ad units (all by default) divided by date and ad unit.

Each report includes the following aggregated metrics for a single day and a single ad unit:

  • Impressions

  • Requests

  • Earnings

  • Clickthrough Rate (CTR)

  • Average View Viewable (AVV)

  • Average View Time (AVV)

  • Viewable Cost Per Mille (vCPM) for the whole ad unit


HTTP Request

GET /api/v1/reports/by-date-and-ad-unit?start=<start>&end=<end>&domains=<domains>&adRoots=<adRoots>


Required Parameters

  • start: a date indicating the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date indicating the end of the range in UTC with the ISO 8601 format YYYY-MM-DD


Optional Parameters

  • domains: a list of domains separated by comas (without spaces)

  • adRoots: a list of ad roots separated by comas (without spaces)


Example Request

curl https://surge.sulvo.com/api/v1/reports/by-date-and-ad-unit?start=2020-01-01&end=2020-01-02&adRoots=mydomain.com_sticky_desktop
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": [
    {
      "date": "2020-01-01",
      "adRoot": "mydomain.com_sticky_desktop",
      "impressions": 497971,
      "earnings": 107.84,
      "adRequests": 645246,
      "avv": 0.7789,
      "avt": 11.58,
      "ctr": 0.0145,
      "vcpm": 0.28
    },
    {
      "date": "2020-02-01",
      "adRoot": "mydomain.com_sticky_desktop",
      "impressions": 510319,
      "earnings": 146.11,
      "adRequests": 664486,
      "avv": 0.775,
      "avt": 11.68,
      "ctr": 0.0142,
      "vcpm": 0.37
    },
  ]
}

 

Bot Filtering

Returns reports with the number of requests that have been blocked within a range of dates for the selected domains. Requests are blocked when they were made by automated bots.

The response includes two different views: one by date showing blocked requests for all the domains on a single day and another one by domain showing blocked requests for each domain within the range.


HTTP Request

GET /api/v1/reports/bot-filtering?start=<start>&end=<end>&domains=<domains>


Required Parameters

  • start: a date indicating the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date indicating the end of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • domains: a list of domains separated by comas (without spaces)


Optional Parameters

  • None


Example Request

curl https://surge.sulvo.com/api/v1/reports/bot-filtering?start=2020-01-01&end=2020-01-02&domains=mydomain.com,example.com
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": {
    "byDate": [
      {
        "date": "2020-01-01T07:00:00.000Z",
        "blockedRequests": 15952
      },
      {
        "date": "2020-01-02T07:00:00.000Z",
        "blockedRequests": 20774
      }
    ],
    "byDomain": [
      {
        "domain": "example.com",
        "blockedRequests": 26621
      },
      {
        "domain": "mydomain.com",
        "blockedRequests": 10105
      }
    ]
  }
}

 

Bot Scoring

Returns reports with the number of impressions and the score showing their average trust score within a range of dates for the selected ad units. The score shows how certain it is -on average- that impressions weren't made made by a bot. The score ranges from 0 to 100 and the higher the better.

The response includes two different views: one by date showing impressions and the average for all selected the ad units on a single day and another one by adRoot impressions and the average score for each ad unit within the range.


HTTP Request

GET /api/v1/reports/bot-scoring?start=<start>&end=<end>&adRoots=<adRoots>


Required Parameters

  • start: a date indicating the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date indicating the end of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • adRoots: a list of ad units separated by comas (without spaces)


Optional Parameters

  • None


Example Request

curl https://surge.sulvo.com/api/v1/reports/bot-scoring?start=2020-01-01&end=2020-01-03&adRoots=example.com_responsive_h,mydomain.com__responsive_v
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": {
    "byDate": [
      {
        "date": "2020-04-30T07:00:00.000Z",
        "totalImpressions": 25531,
        "averageTrustScore": 92.7
      },
      {
        "date": "2020-05-01T07:00:00.000Z",
        "totalImpressions": 25096,
        "averageTrustScore": 93.46
      }
    ],
    "byAdRoot": [
      {
        "root": "example.com_responsive_h",
        "totalImpressions": 27820,
        "averageTrustScore": 92.16
      },
      {
        "root": "mydomain.com__responsive_v",
        "totalImpressions": 22807,
        "averageTrustScore": 94.31
      }
    ]
  }
}

 

Prebid Analysis

Returns reports on the performance of third-party ad providers' bidding. The reports are divided by domain and ad unit for the selected and show the performance on:

  • Requests

  • Average Bid Price

  • Average Response Time

  • Bid Response Rate

  • Number of timeouts

It also includes a number of items to identify the ad unit like title and description.


HTTP Request

GET /api/v1/reports/direct-bidder-analysis?start=<start>&end=<end>&directBidder=<directBidder>


Required Parameters

  • directBidder: a single third party ad provider, you need the corresponding Prebid connector activated for this

  • start: a date indicating the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date indicating the end of the range in UTC with the ISO 8601 format YYYY-MM-DD


Optional Parameters

  • None


Example Request

curl https://surge.sulvo.com/api/v1/reports/direct-bidder-analysis?start=2020-01-01&end=2020-01-03&directBidder=oneBidder
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": {
    "my-domain.com": [
      {
        "adUnit": {
          "title": "Sticky Desktop",
          "description": "A sticky ad for desktop"
        },
        "domain": "my-domain.com",
        "size": {
          "width": 300,
          "height": 250
        },
        "type": "sticky_display",
        "directRequests": 10093,
        "directTimedout": 150,
        "directBidsResponses": 2215,
        "directAveragePrice": 0.03,
        "directAverageResponseTime": 298.58,
        "directBidResponseRate": 0.3727
      },
    ]
  }
}

 

Performance By Date (other providers)

Returns a list of reports within a range of dates for the selected ad units (all by default) divided and ordered by date. These results are only of the requested third-party ad provider and the ad units of the domains you have configured with them.

Each report includes the following aggregated metrics for a single day:

  • Impressions

  • Requests

  • Earnings

  • Cost Per Mille (CPM)


HTTP Request

GET /api/v1/reports/by-date?start=<start>&end=<end>&adProvider=<adProvider>&domains=<domains>&adRoots=<adRoots>


Required Parameters

  • adProvider: a single third party ad provider, you need the corresponding Prebid connector activated for this

  • start: a date the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date the end of the range in UTC with the ISO 8601 format YYYY-MM-DD


Optional Parameters

  • domains: a list of domains separated by comas (without spaces)

  • adRoots: a list of ad roots separated by comas (without spaces)


Example Request

curl https://surge.sulvo.com/api/v1/reports/by-date?start=2020-01-01&end=2020-01-02&adProvider=oneProvider&domains=mydomain.com&adRoots=example.com_sticky_mobile
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": [
    {
      "date": "2020-01-01T07:00:00.000Z",
      "impressions": 1826,
      "earnings": 1.84,
      "adRequests": 81203,
      "cpm": 1.01
    },
    {
      "date": "2020-01-02T07:00:00.000Z",
      "impressions": 1616,
      "earnings": 1.75,
      "adRequests": 77875,
      "cpm": 1.09
    },
  ]
}

 

Performance By Domain and Ad Unit (other providers)

Returns a list of reports within a range of dates for the selected ad units (all by default) divided and domain and ad unit. These results are only of the requested third-party ad provider and the ad units of the domains you have configured with them.

Each report includes the following aggregated metrics of all the selected ad-units of a single domain (as aggregates), and then a list with the same metrics for each ad unit individually:

  • Impressions

  • Requests

  • Earnings

  • Cost Per Mille (CPM)

Also, for each ad unit the following data is included:

  • Title and textual description


HTTP Request

GET /api/v1/reports/by-domain-and-ad-unit?start=<start>&end=<end>&adProvider=<adProvider>&domains=<domains>&adRoots=<adRoots>


Required Parameters

  • adProvider: a single third party ad provider, you need the corresponding Prebid connector activated for this

  • start: a date indicating the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date indicating the end of the range in UTC with the ISO 8601 format YYYY-MM-DD


Optional Parameters

  • domains: a list of domains separated by comas (without spaces)

  • adRoots: a list of ad roots separated by comas (without spaces)


Example Request

curl https://surge.sulvo.com/api/v1/reports/by-domain-and-ad-unit?start=2020-01-01&end=2020-01-02&adProvider=oneProvider&adRoots=mydomain.com_sticky_desktop
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": [
    {
      "domain": "mydomain.com",
      "totals": {
        "impressions": 1823,
        "earnings": 1.84,
        "adRequests": 6680,
        "cpm": 1.01
      },
      "ads": [
        {
          "domain": "mydomain.com",
          "adRoot": "mydomain.com_sticky_desktop",
          "title": "Sticky Desktop",
          "description": "A sticky ad for desktop",
          "impressions": 1823,
          "earnings": 1.84,
          "adRequests": 6680,
          "cpm": 1.01
        }
      ]
    }
  ]
}

 

Performance By Date and Ad Unit (other providers)

Returns a list of reports within a range of dates for the selected ad units (all by default) divided by date and ad unit. These results are only of the requested third-party ad provider and the ad units of the domains you have configured with them.

Each report includes the following aggregated metrics for a single day and a single ad unit:

  • Impressions

  • Requests

  • Earnings

  • Cost Per Mille (CPM)


HTTP Request

GET /api/v1/reports/by-date-and-ad-unit?start=<start>&end=<end>&adProvider=<adProvider>&domains=<domains>&adRoots=<adRoots>


Required Parameters

  • adProvider: a single third party ad provider, you need the corresponding Prebid connector activated for this

  • start: a date indicating the start of the range in UTC with the ISO 8601 format YYYY-MM-DD

  • end: a date indicating the end of the range in UTC with the ISO 8601 format YYYY-MM-DD


Optional Parameters

  • domains: a list of domains separated by comas (without spaces)

  • adRoots: a list of ad roots separated by comas (without spaces)


Example Request

curl https://surge.sulvo.com/api/v1/reports/by-date-and-ad-unit?start=2020-01-01&end=2020-01-02&adProvider=oneProvider&adRoots=mydomain.com_sticky_desktop,example.com_sticky_mobile
-H "Authorization: Bearer your.api.key"
-H "Accept: application/json"


Example Response

{
  "data": [
    {
      "date": "2020-01-01",
      "adRoot": "mydomain.com_sticky_desktop",
      "impressions": 19,
      "earnings": 0.02,
      "adRequests": 4612,
      "cpm": 1.23
    },
    {
      "date": "2020-01-01",
      "adRoot": "example.com_sticky_mobile",
      "impressions": 185,
      "earnings": 0.22,
      "adRequests": 4737,
      "cpm": 1.18
    },
    {
      "date": "2020-01-02",
      "adRoot": "mydomain.com_sticky_desktop",
      "impressions": 249,
      "earnings": 0.27,
      "adRequests": 5789,
      "cpm": 1.09
    },
    {
      "date": "2020-06-05",
      "adRoot": "example.com_sticky_mobile",
      "impressions": 193,
      "earnings": 0.2,
      "adRequests": 20234,
      "cpm": 1.06
    }
  ]
}

 

 

Did you find this article helpful?
Previous

What does botscore mean?

Next