Skip to navigation

Migrating from legacy APIs

Move from the Media Ratings API and the older Analytics endpoints to the Enrichment API and Analytics Reports API.

This page is for you if your integration calls either of these hosts:

  • ratings2.api.pixalate.com: the legacy Media Ratings API (2018 and 2020 epochs). Its current equivalent is the Enrichment API.
  • dashboard.api.pixalate.com: the legacy Analytics reporting endpoints (2016, 2018 and 2022 epochs). The current equivalent is the Analytics Reports API.

For the Fraud API, see Migrate from v2 to v3 instead.

What changes

Legacy APIsCurrent APIs
Hostratings2.api.pixalate.com, dashboard.api.pixalate.comapi.pixalate.com
URL pattern/services/<epoch>/<class>/<method>?...Resource paths, such as /api/v2/mrt/apps/<appId>
Authenticationusername and password query parametersAPI key in the x-api-key header
JSONPOptional callback parameterNot supported. Responses are always JSON.
ErrorsWith callback, most errors came back as 200 with the real status inside the bodyStandard HTTP status codes

Step 1: Get an API key

The current APIs don’t accept a username and password. Ask your Pixalate account manager for an API key, then send it in the x-api-key header on every request. See Authentication and API keys.

Remove username, password and callback from every URL you call. If your code parsed a JSONP wrapper or checked a status code inside a 200 response, switch it to read the HTTP status code instead. See Quotas, limits and errors.

Media Ratings API to Enrichment API

Media Ratings calls

Legacy call (2018 or 2020 epoch)Enrichment API callReference
GET .../Ratings/getApp?appId=<id>GET /api/v2/mrt/apps/<appId>Get mobile app data
GET .../Ratings/getCtvApp?appId=<id>GET /api/v2/mrt/ctv/<appId>Get CTV app data
GET .../Ratings/getDomain?adDomain=<domain>GET /api/v2/mrt/domains/<adDomain>Get domain data
POST .../Ratings/importAppsPOST /api/v2/mrt/appsBatch mobile apps
POST .../Ratings/importCtvAppsPOST /api/v2/mrt/ctvBatch CTV apps
POST .../Ratings/importDomainsPOST /api/v2/mrt/domainsBatch domains
GET .../Ratings/accountBalanceGET /api/v2/mrt/apps, GET /api/v2/mrt/ctv and GET /api/v2/mrt/domains (the quota object)Mobile apps metadata
GET .../Ratings/getLastDataUpdatedInfoThe same metadata calls (the database.lastUpdated field)Domains metadata

All Enrichment API paths are on https://api.pixalate.com.

Media Ratings example

curl "https://ratings2.api.pixalate.com/services/2020/Ratings/getDomain?adDomain=example.com&region=GLOBAL&device=GLOBAL&username=YOUR_USERNAME&password=YOUR_PASSWORD"

Parameters on single lookups

Legacy parameterEnrichment APINotes
appIdappId path segmentMobile apps: the Google Play package name or the App Store track ID.
adDomainadDomain path segment
regionregionSame values: GLOBAL, NA, EMEA, LATAM, APAC.
devicedeviceMobile apps: GLOBAL, smartphone, tablet. CTV apps: roku, firetv. Domains: GLOBAL, desktop, mobile.
widgetwidgetStill a comma-separated list. See Widgets.
includeSpoofingincludeSpoofingCTV apps only.
username, passwordx-api-key header
callbackNoneResponses are always JSON.
prettypretty

The legacy mobile app lookup also took iabv1, appStore and ignoreCase. The Enrichment API reference doesn’t document these parameters. If you rely on one, contact support@pixalate.com before you migrate.

Batch lookups

The batch flow works the same way. You POST a text/plain body with one identifier per line and get back the URL of a newline-delimited JSON report. The report URL returns 404 until processing finishes, so poll it.

LegacyEnrichment API
importApps?region=&device=&widget=POST /api/v2/mrt/apps?region=&device=. The reference documents region and device on this endpoint, but not widget.
importCtvApps?region=&widget=POST /api/v2/mrt/ctv. The reference documents only pretty on this endpoint.
importDomains?region=&device=&widget=POST /api/v2/mrt/domains. The reference documents only pretty on this endpoint.

For report format and polling details, see the Enrichment API guide.

Responses

The 2020-epoch lookups and the Enrichment API return the same top-level shape: status, numFound, and a docs array with one entry per region and device combination, grouped into widgets. Check the field names you use against the field reference for mobile apps, CTV apps or domains.

The 2018-epoch lookups returned a flat record without widgets, so if you’re on 2018, map each field you use to its widget field in the field reference.

Widgets

These widget names are the same in the Media Ratings 2020 epoch and the Enrichment API:

Supply typeWidgets with the same name
Mobile appsappOverview, appDetails, pixalateAdvisories, riskOverview, developerOverview, trafficOverview, brandSafety, appPermissions, trafficOverlap, authorizedSellers, invalidTraffic, viewability, inventory, coppa
CTV appsappOverview, riskOverview, pixalateAdvisories, appSpoofing, appDetails, developerOverview, channels, brandSafety, trafficOverlap, authorizedSellers, invalidTraffic, inventory
DomainsdomainOverview, riskOverview, domainDetails, trafficQualityRisk, siteRisk, siteInfo, brandSafetyRisk, socialMediaRisk, invalidTraffic, inventory, authorizedSellers, viewability, ctr, trafficSources, subDomains, deviceDistribution

The legacy mobile app widgets adCapabilities and interactiveElements aren’t in the Enrichment API reference. The Enrichment API also has widgets the legacy API didn’t document, such as mfa. See the Enrichment API guide for the full list.

Quota balance and last-updated date

accountBalance returned one entry per entity. In the Enrichment API, each supply type has its own metadata call, which returns a quota object and doesn’t use any quota.

accountBalance fieldEnrichment API metadata field
Entity (App, CTV, Domain)Which endpoint you call: /mrt/apps, /mrt/ctv or /mrt/domains
Quotaquota.limit
Consumedquota.used
Remainingquota.available
Quota End Datequota.expiry (when the quota refreshes)

getLastDataUpdatedInfo returned app.lastUpdatedDate and domain.lastUpdatedDate. Use database.lastUpdated from GET /api/v2/mrt/apps and GET /api/v2/mrt/domains instead.

How quota is counted is described in Quotas, limits and errors.

Legacy Analytics to Analytics Reports API

Analytics calls

Legacy (2016, 2018 or 2022 epoch)Analytics Reports API
https://dashboard.api.pixalate.com/services/<epoch>/Report/getDetails?...GET https://api.pixalate.com/api/v2/analytics/reports/<reportId>?...
getExportUri in the pathAdd exportUri=true to the query string
reportId query parameterreportId path segment. If you didn’t send a reportId before, use default.
username, passwordx-api-key header
callbackNone. Responses are always JSON.
q, timeZone, start, limit, isAsync, isLargeResultSetSame names

See the Analytics Reports API reference for every parameter.

Analytics example

curl "https://dashboard.api.pixalate.com/services/2018/Report/getDetails?username=YOUR_USERNAME&password=YOUR_PASSWORD&timeZone=0&start=0&limit=20&q=adDomain,impressions,givtSivtRate%20WHERE%20day%3E%3D'2026-02-06'%20AND%20day%3C%3D'2026-02-06'%20ORDER%20BY%20impressions%20DESC"

URL-encode the q value. For the query syntax, see Query language.

Renamed metrics and labels

If you’re moving from an older epoch, check your queries and CSV processing for these renames.

These names changed in the 2018 epoch. Use the 2018 name in your q queries.

2016 name2018 name
deviceId (dimension)deviceModelId
nonGivtSivtViewsviews
nonGivtSivtNonViewsnonViews
nonGivtSivtUndeterminedImpsundeterminedImps
nonGivtSivtMeasuredImpressionsmeasuredImpressions
nonGivtSivtMeasuredRatemeasuredRate
nonGivtSivtViewabilityviewability
nonGivtSivtViewsRateviewsRate
nonGivtSivtNonViewsRatenonViewsRate
nonGivtSivtUndeterminedImpsRateundeterminedImpsRate
clickOrphanstotalClicks
conversionOrphanstotalConversions
convRatetotalConvRate
givtClickOrphansgivtTotalClicks
givtClickOrphansRategivtTotalClicksRate
givtConversionOrphansgivtTotalConversions
givtConvsOrphansRategivtTotalConvsRate
nonGivtClickOrphansnonGivtTotalClicks
nonGivtConversionOrphansnonGivtTotalConversions
nonGivtSivtClickOrphansnonGivtSivtTotalClicks
nonGivtSivtConversionOrphansnonGivtSivtTotalConversions
sivtClickOrphanssivtTotalClicks
sivtClickOrphansRatesivtTotalClicksRate
sivtConversionOrphanssivtTotalConversions
sivtConvsOrphansRatesivtTotalConvsRate

The 2022 epoch renamed these column labels in exported CSV files. Metric names in queries didn’t change. If your code reads CSV exports by header label, update it.

Metric2018 label2022 label
impressionsGross Tracked AdsGross Ad Counts
shareOfImpressionsShare of Gross Tracked Ads %Share of Gross Ad Counts %
ssaiImpressionsGross SSAI Tracked AdsGross SSAI Ad Counts
ssaiImpressionsRateGross SSAI Tracked Ads %Gross SSAI Ad Counts %
ssaiTransparentImpressionsGross SSAI Transparent Tracked AdsGross SSAI Transparent Ad Counts
ssaiTransparentImpressionsRateGross SSAI Transparent Tracked Ads %Gross SSAI Transparent Ad Counts %
ipv6ImpressionsGross IPv6 Tracked AdsGross IPv6 Ad Counts
ipv6ImpressionsRateGross IPv6 Tracked Ads %Gross IPv6 Ad Counts %
duplicateImpsGross Duplicate Tracked AdsGross Duplicate Ad Counts
duplicateImpsRateGross Duplicate Tracked Ads %Gross Duplicate Ad Counts %
nonGivtImpressionsTracked AdsAd Counts
shareOfNonGivtImpressionsShare of Tracked Ads %Share of Ad Counts %
nonGivtSsaiImpressionsSSAI Tracked AdsSSAI Ad Counts
nonGivtSsaiImpressionsRateSSAI Tracked Ads %SSAI Ad Counts %
nonGivtSsaiTransparentImpressionsSSAI Transparent Tracked AdsSSAI Transparent Ad Counts
nonGivtSsaiTransparentImpressionsRateSSAI Transparent Tracked Ads %SSAI Transparent Ad Counts %
nonGivtIpv6ImpressionsIPv6 Tracked AdsIPv6 Ad Counts
nonGivtIpv6ImpressionsRateIPv6 Tracked Ads %IPv6 Ad Counts %
nonGivtDuplicateImpsDuplicate Tracked AdsDuplicate Ad Counts
nonGivtDuplicateImpsRateDuplicate Tracked Ads %Duplicate Ad Counts %
nonGivtSivtImpressionsNet Tracked AdsNet Ad Counts
shareOfNonGivtSivtImpressionsShare of Net Tracked Ads %Share of Net Ad Counts %
nonGivtSivtSsaiImpressionsNet SSAI Tracked AdsNet SSAI Ad Counts
nonGivtSivtSsaiImpressionsRateNet SSAI Tracked Ads %Net SSAI Ad Counts %
nonGivtSivtSsaiTransparentImpressionsNet SSAI Transparent Tracked AdsNet SSAI Transparent Ad Counts
nonGivtSivtSsaiTransparentImpressionsRateNet SSAI Transparent Tracked Ads %Net SSAI Transparent Ad Counts %
nonGivtSivtIpv6ImpressionsNet IPv6 Tracked AdsNet IPv6 Ad Counts
nonGivtSivtIpv6ImpressionsRateNet IPv6 Tracked Ads %Net IPv6 Ad Counts %
nonGivtSivtDuplicateImpsNet Duplicate Tracked AdsNet Duplicate Ad Counts
nonGivtSivtDuplicateImpsRateNet Duplicate Tracked Ads %Net Duplicate Ad Counts %
givtImpressionsGIVT Tracked AdsGIVT Ad Counts
givtImpsRateGIVT Tracked Ads %GIVT Ad Counts %
shareOfGivtImpressionsShare of GIVT Tracked Ads %Share of GIVT Ad Counts %
givtIpv6ImpressionsIPv6 GIVT Tracked AdsIPv6 GIVT Ad Counts
givtIpv6ImpressionsRateIPv6 GIVT Tracked Ads %IPv6 GIVT Ad Counts %
sivtImpressionsSIVT Tracked AdsSIVT Ad Counts
sivtImpsRateSIVT Tracked Ads %SIVT Ad Counts %
shareOfSivtImpressionsShare of SIVT Tracked Ads %Share of SIVT Ad Counts %
shareOfGivtSivtImpressionsShare of IVT Tracked Ads %Share of IVT Ad Counts %
sivtIpv6ImpressionsIPv6 SIVT Tracked AdsIPv6 SIVT Ad Counts
givtSivtIpv6ImpressionsIPv6 IVT Tracked AdsIPv6 IVT Ad Counts
sivtIpv6ImpressionsRateIPv6 SIVT Tracked Ads %IPv6 SIVT Ad Counts %
givtSivtIpv6ImpressionsRateIPv6 IVT Tracked Ads %IPv6 IVT Ad Counts %

Timelines

Contact your Pixalate account manager for timelines on the legacy APIs and for help planning your migration. For technical questions, contact support@pixalate.com.