RevContent Widget API
Publisher widget inventory, geo statistics and Sub ID reporting.
Publisher widget inventory, geo statistics and Sub ID reporting.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/revcontent-widget-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: RevContent Widget API
description: Publisher widget inventory, geo statistics and Sub ID reporting.
version: '1.0'
contact:
name: RevContent Support
url: https://www.revcontent.com/resources/contact-us
email: developer@revcontent.com
servers:
- url: https://api.revcontent.io
description: RevContent Production API
security:
- BearerAuth: []
tags:
- name: Widget
description: Publisher widget inventory, geo statistics and Sub ID reporting.
paths:
/stats/api/v1.0/widgets:
get:
operationId: getAllWidgets
summary: Get All Widgets
description: Get list of widgets
tags:
- Widget
x-permission:
- Publisher
parameters:
- name: widget
in: query
required: false
description: Filter stats by a specific widget. For example "1234". Defaults to all widgets.
schema:
type: number
- name: domain
in: query
required: false
description: Filter widgets by a specific domain. For example "revcontent.com". Defaults to all domains.
schema:
type: string
- name: device
in: query
required: false
description: 'Filter stats by a specific device. Values: "all", "desktop", "tablet", "mobile", "unknown". Defaults to all.'
schema:
type: string
- name: date_from
in: query
required: false
description: Start date for the statistics in Y-m-d format. Defaults to first of the current month.
schema:
type: string
default: first of the month
- name: date_to
in: query
required: false
description: End date for the statistics in Y-m-d format. Defaults to today.
schema:
type: string
default: today's date
- name: limit
in: query
required: false
description: Number of records to return. Max 100.
schema:
type: number
default: 100
- name: offset
in: query
required: false
description: Offset for the records to return.
schema:
type: number
default: 0
- name: aggregate
in: query
required: false
description: If 'yes', statistics aggregated by date are retrieved.
schema:
type: string
default: 'no'
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: 'true'
data:
type: array
items:
type: object
properties:
id:
type: string
description: Widget id (if 'aggregate' is 'no')
widget_imps:
type: string
description: Number of widget impressions
page_views:
type: string
description: Number of page views
ad_ctr:
type: string
description: Sponsored ad click through rate
ad_clicks:
type: string
description: Sponsored ad clicks
ad_cpc:
type: string
description: Sponsored ad average cost per click
ad_rpm:
type: string
description: Sponsored ad revenue per milli
ad_revenue:
type: string
description: Sponsored ad total revenue
required:
- id
- widget_imps
- page_views
- ad_ctr
- ad_clicks
- ad_cpc
- ad_rpm
- ad_revenue
description: List of widgets and their statistics
aggregate:
type: object
properties:
success:
type: boolean
description: 'true'
data:
type: array
items:
type: object
properties:
date:
type: string
description: Stats date (if 'aggregate' is 'yes')
widget_imps:
type: string
description: Number of widget impressions
page_views:
type: string
description: Number of page views
ad_ctr:
type: string
description: Sponsored ad click through rate
ad_clicks:
type: string
description: Sponsored ad clicks
ad_cpc:
type: string
description: Sponsored ad average cost per click
ad_rpm:
type: string
description: Sponsored ad revenue per milli
ad_revenue:
type: string
description: Sponsored ad total revenue
required:
- date
- widget_imps
- page_views
- ad_ctr
- ad_clicks
- ad_cpc
- ad_rpm
- ad_revenue
description: List of widgets and their statistics
description: Statistics aggregated by date (returned when aggregate=yes).
required:
- success
- data
example:
success: true
data:
- id: '218'
name: Test Widget 1
widget_imps: '149756'
page_views: '149756'
ad_ctr: '7.1189'
ad_clicks: '10661'
ad_cpc: '0.05792852'
ad_rpm: '4.123881513929325035390902'
ad_revenue: '617.57600000000000000000'
- id: '219'
name: Test Widget 2
widget_imps: '107'
page_views: '107'
ad_ctr: '8.4112'
ad_clicks: '9'
ad_cpc: '0.27294444'
ad_rpm: '22.957943925233644859813084'
ad_revenue: '2.45650000000000000000'
- id: '220'
name: Test Widget 3
widget_imps: '25977'
page_views: '25977'
ad_ctr: '0.0154'
ad_clicks: '4'
ad_cpc: '0.06375000'
ad_rpm: '0.009816376024945143781037'
ad_revenue: '0.25500000000000000000'
- id: '221'
name: Test Widget 4
widget_imps: '121904'
page_views: '121904'
ad_ctr: '2.1845'
ad_clicks: '2663'
ad_cpc: '0.06075122'
ad_rpm: '1.327113958524740779629872'
ad_revenue: '161.78050000000000000000'
- id: '222'
name: Test Widget 5
widget_imps: '99914'
page_views: '99914'
ad_ctr: '0.0230'
ad_clicks: '23'
ad_cpc: '0.54991304'
ad_rpm: '0.126588866425125608022899'
ad_revenue: '12.64800000000000000000'
'400':
description: Error-Response
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
errors:
- code: 400
title: Invalid Parameters
detail: Invalid Parameters sent
'401':
description: Missing or invalid access token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-codeSamples:
- lang: json
label: Get Widgets
source: "curl -X GET \\\n -H \"Authorization: Bearer e62a04f681ba57d0120f8f584b688e31f04cf41d\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Cache-Control: no-cache\" \\\n 'https://api.revcontent.io/stats/api/v1.0/widgets'"
- lang: json
label: Get Widgets (Aggregate)
source: "curl -X GET \\\n -H \"Authorization: Bearer e62a04f681ba57d0120f8f584b688e31f04cf41d\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Cache-Control: no-cache\" \\\n 'https://api.revcontent.io/stats/api/v1.0/widgets?date_from=2016-11-06&date_to=2016-11-07&aggregate=yes'"
/stats/api/v1.0/widgets_geo:
get:
operationId: getAllWidgetsGeo
summary: Get All Widgets Geo Stats
description: Get list of widgets and their stats broken down by country
tags:
- Widget
x-permission:
- Publisher
parameters:
- name: country
in: query
required: false
description: 'Filter stats by a specific country. Values: ISO 3166-1 alpha-2 country codes, for example "US", or "unknown". Defaults to all countries.'
schema:
type: string
- name: widget
in: query
required: false
description: Filter stats by a specific widget. For example "1234". Defaults to all widgets.
schema:
type: number
- name: domain
in: query
required: false
description: Filter widgets by a specific domain. For example "revcontent.com". Defaults to all domains.
schema:
type: string
- name: device
in: query
required: false
description: 'Filter stats by a specific device. Values: "all", "desktop", "tablet", "mobile", "unknown". Defaults to all.'
schema:
type: string
- name: date_from
in: query
required: false
description: Start date for the statistics in Y-m-d format. Defaults to today.
schema:
type: string
default: today's date
- name: date_to
in: query
required: false
description: End date for the statistics in Y-m-d format. Defaults to today. Maximum of 60 days after the Start Date.
schema:
type: string
default: today's date
- name: limit
in: query
required: false
description: Number of records to return. Max 100.
schema:
type: number
default: 100
- name: offset
in: query
required: false
description: Offset for the records to return.
schema:
type: number
default: 0
- name: aggregate
in: query
required: false
description: If 'yes', statistics aggregated by date are retrieved.
schema:
type: string
default: 'no'
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: 'true'
data:
type: array
items:
type: object
properties:
id:
type: string
description: Widget id (if 'aggregate' is 'no')
name:
type: string
description: Widget name
country:
type: string
description: ISO 3166-1 alpha-2 country code or null (for unknown country)
widget_imps:
type: string
description: Number of widget impressions
page_views:
type: string
description: Number of page views
ad_ctr:
type: string
description: Sponsored ad click through rate
ad_clicks:
type: string
description: Sponsored ad clicks
ad_cpc:
type: string
description: Sponsored ad average cost per click
ad_rpm:
type: string
description: Sponsored ad revenue per milli
ad_revenue:
type: string
description: Sponsored ad total revenue
required:
- id
- name
- country
- widget_imps
- page_views
- ad_ctr
- ad_clicks
- ad_cpc
- ad_rpm
- ad_revenue
description: List of widgets and their statistics
aggregate:
type: object
properties:
success:
type: boolean
description: 'true'
data:
type: array
items:
type: object
properties:
date:
type: string
description: Stats date (if 'aggregate' is 'yes')
country:
type: string
description: ISO 3166-1 alpha-2 country code
widget_imps:
type: string
description: Number of widget impressions
page_views:
type: string
description: Number of page views
ad_ctr:
type: string
description: Sponsored ad click through rate
ad_clicks:
type: string
description: Sponsored ad clicks
ad_cpc:
type: string
description: Sponsored ad average cost per click
ad_rpm:
type: string
description: Sponsored ad revenue per milli
ad_revenue:
type: string
description: Sponsored ad total revenue
required:
- date
- country
- widget_imps
- page_views
- ad_ctr
- ad_clicks
- ad_cpc
- ad_rpm
- ad_revenue
description: List of widgets and their statistics
description: Statistics aggregated by date (returned when aggregate=yes).
required:
- success
- data
example:
success: true
data:
- id: '218'
name: Test Widget 1
country: AU
widget_imps: '149756'
ad_ctr: '7.1189'
ad_clicks: '10661'
ad_cpc: '0.05792852'
ad_rpm: '4.123881513929325035390902'
ad_revenue: '617.57600000000000000000'
- id: '218'
name: Test Widget 1
country: BR
widget_imps: '107'
ad_ctr: '8.4112'
ad_clicks: '9'
ad_cpc: '0.27294444'
ad_rpm: '22.957943925233644859813084'
ad_revenue: '2.45650000000000000000'
- id: '218'
name: Test Widget 1
country: CA
widget_imps: '25977'
ad_ctr: '0.0154'
ad_clicks: '4'
ad_cpc: '0.06375000'
ad_rpm: '0.009816376024945143781037'
ad_revenue: '0.25500000000000000000'
- id: '218'
name: Test Widget 1
country: GB
widget_imps: '121904'
ad_ctr: '2.1845'
ad_clicks: '2663'
ad_cpc: '0.06075122'
ad_rpm: '1.327113958524740779629872'
ad_revenue: '161.78050000000000000000'
- id: '218'
name: Test Widget 1
country: US
widget_imps: '99914'
ad_ctr: '0.0230'
ad_clicks: '23'
ad_cpc: '0.54991304'
ad_rpm: '0.126588866425125608022899'
ad_revenue: '12.64800000000000000000'
'400':
description: Error-Response
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
errors:
- code: 400
title: Invalid Parameters
detail: Invalid Parameters sent
'401':
description: Missing or invalid access token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-codeSamples:
- lang: json
label: Get Widgets
source: "curl -X GET \\\n -H \"Authorization: Bearer e62a04f681ba57d0120f8f584b688e31f04cf41d\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Cache-Control: no-cache\" \\\n 'https://api.revcontent.io/stats/api/v1.0/widgets'"
- lang: json
label: Get Widgets (Aggregate)
source: "curl -X GET \\\n -H \"Authorization: Bearer e62a04f681ba57d0120f8f584b688e31f04cf41d\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Cache-Control: no-cache\" \\\n 'https://api.revcontent.io/stats/api/v1.0/widgets?date_from=2016-11-06&date_to=2016-11-07&aggregate=yes'"
/stats/api/v1.0/widgets/{widget_id}/revsub:
get:
operationId: getSubIDStats
summary: Get Sub ID Stats
description: Get list of sub id statistic csv's for a specific widget. The stats are not realtime and are behind by an hour.
tags:
- Widget
x-permission:
- Publisher
parameters:
- name: widget_id
in: path
required: true
description: Widget ID.
schema:
type: number
- name: date
in: query
required: true
description: Date of statistics in Y-m-d format (EST timezone).
schema:
type: string
- name: hour
in: query
required: false
description: 'Get stats for a specific hour. Should be in 24-hour format and between 00-23 (EST timezone). For ex: "hour=01"'
schema:
type: string
default: Returns stats for all available hours of the date
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: 'true'
data:
type: array
items:
type: string
description: List of records that contain statistics
required:
- success
- data
example:
success: true
data:
- https://revcontent.s3.amazonaws.com/sub_id_stats/20160315/30/20160315_10985_sub_id_stats_0.csv.gz?AWSAccessKeyId=REDACTED_AWS_ACCESS_KEY_ID&Expires=1460495122&Signature=4%2BcSnsC1rVWCCbasazNVrv8blFQ%3D
- https://revcontent.s3.amazonaws.com/sub_id_stats/20160315/30/20160315_10985_sub_id_stats_1.csv.gz?AWSAccessKeyId=REDACTED_AWS_ACCESS_KEY_ID&Expires=1460495122&Signature=Jyd5F77HIho1xcYlhT2kuo0bzMw%3D
- https://revcontent.s3.amazonaws.com/sub_id_stats/20160315/30/20160315_10985_sub_id_stats_2.csv.gz?AWSAccessKeyId=REDACTED_AWS_ACCESS_KEY_ID&Expires=1460495122&Signature=Y6%2F86vJEGZq8NqY5aaOPpCzjAdE%3D
'400':
description: Error-Response
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
errors:
- code: 400
title: Invalid Parameters
detail: Invalid Parameters sent
'401':
description: Missing or invalid access token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-codeSamples:
- lang: json
label: Get Sub ID Record List
source: "curl -X GET \\\n -H \"Authorization: Bearer e62a04f681ba57d0120f8f584b688e31f04cf41d\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Cache-Control: no-cache\" \\\n 'https://api.revcontent.io/stats/api/v1.0/widgets/10985/revsub?date=2016-03-15'"
components:
schemas:
Error:
type: object
description: RevContent error envelope.
properties:
success:
type: boolean
const: false
errors:
type: array
items:
type: object
properties:
code:
type: integer
description: HTTP-aligned error code.
title:
type: string
description: Short error title.
detail:
type: string
description: Human readable error detail.
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: OAuth 2.0 client-credentials access token obtained from POST /oauth/token. Valid for 24 hours.
x-source: https://api.revcontent.io/docs/stats/api_data.json
x-source-format: apiDoc 0.17.7
x-generated: '2026-08-13'
x-method: derived