Skip to main content

Engage API V2 (Outbrain)

Overview​

The Engage API V2 provides RESTful interfaces for interacting with the Teads Engage Reports product. For more information, visit the Outbrain publisher help center.

The API is structured around the following core entities and operations:

Entity / ReportSupported Operations
PublishersRead (GET)
WidgetsRead (GET)
NativeappsRead (GET)
CountriesRead (GET)
TimezonesRead (GET)
Outbrain ReportRead (GET)

HTTP Methods​

MethodAction
GETRetrieve a resource or list of resources.

HTTP Status Code Replies​

Status CodeMeaningDescription
200OKThe request was successful.
400Bad RequestThe request was malformed or missing required parameters.
401UnauthorizedAuthentication failed or user lacks permissions.
403ForbiddenAccess denied.
404Not FoundRequested resource was not found.
429Too Many RequestsRate limit exceeded.
504Gateway TimeoutRequest timed out.

API URL​

The base URL for all API endpoints is:

https://api.outbrain.com/engage/v2

What's New in V2?​

Enhanced Security & Limits
  • Hashed Publisher ID: V2 secures your account by using a hashed string for your publisher ID in both request parameters and response bodies. Contact your Teads account manager to receive this ID.
  • Request Limit (10,000 max): The limit parameter now has a ceiling of 10,000 items. If your requests require more items, implement pagination using offset and limit.

Migration Example​

# V1
GET https://api.outbrain.com/engage/v1/reports/outbrain/publishers/publisherId...

# V2
GET https://api.outbrain.com/engage/v2/reports/outbrain?entityId=extPublisherId...

Authentication​

Obtaining a Token​

You must include an authentication token in all API requests using the HTTP header OB-TOKEN-V1.

Token Lifecycle
  • Tokens are valid for 30 days. Expired tokens cannot access the API.
  • Generating a new token does not invalidate previously generated active tokens.
  • When an account password or email is changed, all prior tokens are revoked immediately.

Token Request​

The /login endpoint is the only transaction requiring Basic Authentication.

Include an HTTP header:

  • Header Name: Authorization
  • Value: BASIC BASE-64-ENC(YOUR_OUTBRAIN_USER_NAME:YOUR_OUTBRAIN_PASSWORD)
info

All communication with the Engage API uses HTTPS, keeping credentials safe.

cURL Example​

curl -u YOUR_OUTBRAIN_USER_NAME:YOUR_OUTBRAIN_PASSWORD https://api.outbrain.com/engage/v2/login

Add -v to inspect the Authorization HTTP header in the output.

Token Management Recommendation​

Given the rate limit of 2 requests/hour on the /login endpoint, store and reuse an active token, refreshing it once every 30 days or less.


Rate Limits​

ScopeLimitWindow
Authentication (/login)2 requestsPer hour per user
Reporting API30 requestsPer minute per publisher
warning

Exceeding rate limits returns HTTP status 429 (Too Many Requests).


Users​

Users represent individual account access to Teads services and to the publisher dashboard. Users have permissions to one or more Publisher accounts.

note

Users cannot be managed via this API and must be created with the help of your Teads account representative.


Publisher Lookups​

note

Publishers cannot be created via the API and must be provisioned via a Teads Account Manager.

Publishers Collection​

Retrieve all Publishers associated with the current user:

GET https://api.outbrain.com/engage/v2/publishers
Header: OB-TOKEN-V1: <your_token>

Widgets Collection​

Retrieve all Widgets associated with publisher external ID {id}:

GET https://api.outbrain.com/engage/v2/publishers/{id}/widgets
Header: OB-TOKEN-V1: <your_token>

Nativeapps Collection​

Retrieve all native apps associated with publisher external ID {id}:

GET https://api.outbrain.com/engage/v2/publishers/{id}/nativeapps
Header: OB-TOKEN-V1: <your_token>

General Lookups​

Countries Collection​

Retrieve a list of all countries:

GET https://api.outbrain.com/engage/v2/countries
Header: OB-TOKEN-V1: <your_token>

Timezones Collection​

Retrieve a list of all timezones:

GET https://api.outbrain.com/engage/v2/timezones
Header: OB-TOKEN-V1: <your_token>

Reports​

Overview​

Report endpoints allow you to retrieve metrics at various levels of granularity.

Performance Metric Latency

Performance reports have a 2–4 hour delay; performance metrics for the current day are partial.

Response Structure​

All reporting endpoints share a common response structure:

PropertyTypeDescription
itemsArrayArray of OutbrainReportItems matching criteria.
totalItemsNumberCount of the total results after filtering.
metricsSumsObjectAggregated metrics for the returned set of data.

Filter Parameters​

OperatorTypeDescriptionExample
:eq:NumericEqualoutbrain?filter=revenue:eq:2000
:gt:NumericGreater thanoutbrain?filter=organicClicks:gt:300
:lt:NumericLess thanoutbrain?filter=paidClicks:lt:890
:between:NumericBetweenoutbrain?filter=revenue:between:20,900
:in:ListInoutbrain?filter=widget:in:2089,84984,38984
:not_in:ListNot inoutbrain?filter=widget:not_in:2089,8466
:contains:StringContainsoutbrain?filter=referrer:contains:ar
:not_contains:StringNot containsoutbrain?filter=referrer:not_contains:ar
Chaining Filters

Chain filters with semicolons (;):

filter=revenue:gt:2000;widget:in:234,657

Note: Nesting of Boolean operators is not currently supported.

OutbrainReportItems Fields​

PropertyTypeDescriptionBreakdown Availability
dayStringDate format yyyyMMddOptional breakdown
monthStringDate format yyyyMMOptional breakdown
platformObjectPlatform entityOptional breakdown
referrerObjectReferrer entityOptional breakdown
countryObjectCountry entityOptional breakdown
sectionObjectSection entityOptional breakdown
widgetObjectWidget entityOptional breakdown
docObjectDocument entityOptional breakdown
partnerAppObjectPartner app entityOptional breakdown
paidPvsNumberTotal pageviews with at least one paid linkNot available on widget breakdown
totalPvsNumberTotal pageviews with at least one linkNot available on widget breakdown
paidReqsNumberTotal paid widget requestsAvailable only on widget breakdown
totalReqsNumberTotal widget requestsAvailable only on widget breakdown
revenueNumberTotal revenueAll
rpmByPvsNumber(Revenue / paidPvs) * 1000All
reqsRpmNumber(Revenue / paidReqs) * 1000All
paidClicksNumberTotal paid clicksAll
organicClicksNumberTotal organic clicksAll
totalClicksNumberTotal clicksAll
paidCtrByPvsNumberAverage CTR: (Paid clicks / paidPvs) * 100All
totalCtrByPvsNumberAverage CTR: (Total clicks / totalPvs) * 100All
reqsPaidCtrNumberAverage CTR: (Paid clicks / paidReqs) * 100All
reqsTotalCtrNumberAverage CTR: (Total clicks / totalReqs) * 100All
organicPvsNumberTotal pageviews with at least one organic linkNot available on widget breakdown
organicReqsNumberTotal organic widget requestsAvailable only on widget breakdown
organicCtrByPvsNumberAverage CTR: (Organic clicks / organicPvs) * 100All
reqsOrganicCtrNumberAverage CTR: (Organic clicks / organicReqs) * 100All
videoRevenueNumberNet revenue generated from videoAll
videoPlaysNumberNumber of video playsAll
viewabilityRateNumberViewability percentage: (Widget exposed / Widget served) * 100All
paidViewabilityRateNumber(Paid widget exposed / Paid widget served) * 100All
organicViewabilityRateNumber(Organic widget exposed / Organic widget served) * 100All
viewableCtrNumber(Total clicks / [totalReqs * viewabilityRate]) * 100All
viewableOrganicCtrNumber(Organic clicks / [organicReqs * organicViewabilityRate]) * 100All
viewablePaidCtrNumber(Paid clicks / [paidReqs * paidViewabilityRate]) * 100All
viewableRpmNumberRevenue per 1,000 paid in-view requestsAll
optInRateByReqsNumberConsent rate by requests: (Opt-in reqs / Total reqs) * 100Not on doc breakdown
optInRateByPvsNumberConsent rate by page views: (Opt-in PVs / Total PVs) * 100Not on doc breakdown

Request Structure / Parameters​

ParameterTypeRequiredDetails
entityIdStringYesExternal ID of the entity (publisher/group). Contact your account manager for this ID.
fromDateStringYesStart date-time (yyyyMMdd).
toDateStringYesEnd date-time (yyyyMMdd).
limitNumberNoMax results to return. Default: 500, Max: 10000.
offsetNumberNoOrdinal index of first result to retrieve. Default: 0.
sortStringNoSorting field. Default: revenue.
orderStringNoSorting order (asc or desc). Default: desc.
filterStringNoFilter expression string.
breakdownsArrayNoAggregation entities. Default: day. Max: 4.
currencyCodeStringNoRevenue currency code. Default: USD.
decDigitsNumberNoDecimal places for revenue (0–6). Default: 2.

Breakdowns​

BreakdownDescriptionExample
dayDay entity/reports/outbrain?breakdowns=day&entityId={entityId}
monthMonth entity/reports/outbrain?breakdowns=month&entityId={entityId}
platformPlatform entity/reports/outbrain?breakdowns=platform&entityId={entityId}
referrerReferrer entity/reports/outbrain?breakdowns=referrer&entityId={entityId}
countryCountry entity/reports/outbrain?breakdowns=country&entityId={entityId}
sectionSection entity/reports/outbrain?breakdowns=section&entityId={entityId}
widgetWidget entity/reports/outbrain?breakdowns=widget&entityId={entityId}
docDocument entity/reports/outbrain?breakdowns=doc&entityId={entityId}
partnerAppPartner app entity/reports/outbrain?breakdowns=partnerApp&entityId={entityId}
Chaining Breakdowns

Chain breakdowns with commas: breakdowns=day,widget (up to 4 breakdowns).

Unsupported Breakdown Combinations

The following breakdown pairs are not supported together:

  • day + month
  • referrer + country
  • referrer + doc
  • country + doc

Note: Document (doc) level breakdown is only available for data within the last 12 months.


Error Handling​

When the API returns an error status code, JSON details are returned:

{
"moreInfo": "getWidgets",
"errorMessage": "access denied"
}

Troubleshooting​

  1. Community Support: Join and post in the Engage API Google Group.
  2. Trace Header: Include the x-traceid header from the response when contacting support.