openapi: 3.1.0
info:
title: Outbrain Amplify API
version: '0.1'
description: "This API describes the interfaces for interacting with the Outbrain Amplify product. More information about\
\ Amplify can be found on our website: http://www.outbrain.com/amplify.\n\nAt this time we are working with a select number\
\ of partners to integrate the Amplify API. To be considered for the Amplify API private beta please register for the\
\ beta plan.\n\nIf you have any questions, issues, feature requests as well as if you're interested in announcments of\
\ new features, please join our Google group:\n\nhttps://groups.google.com/forum/#!forum/outbrain-amplifyapi\n\nAPI Url\n\
The base url for all API end-points is https://api.outbrain.com/amplify/v0.1/\n\nTroubleshooting\nIf you're experiencing\
\ any issues or any other difficulties, please post a new topic in our Google group: https://groups.google.com/forum/#!forum/outbrain-amplifyapi\n\
\nPlease attach to your post the AMPLIFY-REQUEST-ID header from the returned response.\nThis header allows us to identify\
\ your unique request and helps us to reply quicker and more efficiently.\n\nUpdates\nAug 13, 2026\nNew: Brand Logo\n\n\
You can now read and set a brand logo via the API. A new logoMetadata field has been added to the Marketer entity, and\
\ to the PromotedLink entity (available via extraFields=LogoMetaData) so an individual ad can carry its own logo.\n\n\
Feb 1, 2026\nNew: Section Volume Control for CBS Campaigns\n\nYou can now provide feedback on individual section performance\
\ for your CBS Auto mode campaigns (tROAS, tCPA, Max Conversion). This allows you to increase or decrease traffic volume\
\ from specific sections based on your own external data, such as LTV or ROAS. A new volumeControl object has been added\
\ to the Campaign entity to manage these adjustments.\n\nJan 4, 2026\nEnhanced Publisher and Section Exclusion Experience\n\
\nWe are introducing a new publisher and section exclusion experience that allows advertisers to apply temporary or permanent\
\ blocks, either individually or in bulk. This update provides clearer visibility, predictable behavior, and the ability\
\ to easily undo or adjust exclusions via the API.\n\nWhy This Matters\nPublisher traffic can spike temporarily due to\
\ breaking news or viral events, attracting audiences that may not align with advertiser intent. During these periods,\
\ campaigns often generate clicks with few conversions, inflating costs.\n\nTemporary exclusions allow you to pause this\
\ inventory while the news cycle is active. The system then automatically reintroduces the inventory once traffic normalizes—avoiding\
\ the need for unnecessary permanent blocks.\n\nTechnical Implementation: New expiration Field under blockedSites\nTo\
\ enable temporary blocking, we have added a new optional field named expiration to both the blockedPublishers and blockedSections\
\ objects under blockedSites.\n\nKey Functionalities\n\n- \nAuto-Expiration: Temporary exclusions automatically expire\
\ and reintroduce inventory without alerts.\n\n- \nRe-activation: You can now update settings for sections that were previously\
\ Permanently blocked, overriding the original exclusion state.\n\n- \nInheritance: Duplicated campaigns will inherit\
\ the existing exclusion states (Temporary or Permanent) of the original campaign.\n\nImportant Notes\n\n- \nReporting:\
\ History changes will now track the distinction between permanent and temporary exclusions.\n\n- \nCSV Limitation: Exclusions\
\ uploaded via CSV files remain Permanent by default at this time (the expiration field is not yet supported in CSV uploads).\n\
\nAction Required\nReview your current blocking logic. If you wish to utilize temporary blocking for viral events, update\
\ your integration to populate the expiration field in your blockedPublishers and blockedSections payloads.\n\nOct 16,\
\ 2025\nUpcoming Change to Minimum Campaign Budget Effective November 3rd 2025\n\nTo help increase campaign performance\
\ and ensure new campaigns can generate results in a timely fashion, we are adjusting the minimum required budget. This\
\ change will ensure campaigns have sufficient daily spend for our optimization systems to function effectively\n\nSummary\
\ of the Change\n\n- \nWhat: The minimum daily budget for a new campaign will be increased from $20.00 to $25.00 USD.\n\
\n- \nEffective Date: This change will take effect on November 3rd 2025\n\n- \nScope: This change applies only to newly\
\ created campaigns. Existing campaigns with budgets under $25.00 will continue to run without any interruption or required\
\ changes.\n\nHow This Affects You\nStarting November 3rd, 2025, any API call to the POST /budgets endpoint will enforce\
\ the following rules:\n\n- \nIf type = \"DAILY\", then amount must be greater than or equal to 25.\n\n- \nIf type = \"\
MONTHLY\", then amount must be greater than or equal to 750.\n\n- \nIf type = \"CAMPAIGN\", then amount must be greater\
\ than or equal to 25 x number of campaign days.\n\nAdditionally:\n\n- Any API call to the PUT /budgets endpoint to update\
\ campaigns created after November 3rd, 2025, will have the same enforcement rules outlined above.\n\nImportant Note:\n\
Daily limits for other currencies are exposed via the GET /currencies endpoint.\n\nAction Required\nPlease review your\
\ budget and campaign creation and update logic and ensure that any new campaigns are created with a daily budget of at\
\ least $25.00. We recommend making this update in your integration before the effective date to ensure a smooth transition.\n\
\nJul 8, 2025\nNew Performance Report Endpoint - Marketers Report\n\nYou can now retrieve performance reporting aggregated\
\ by Marketers aggregation, using your primary account ID.\n\nTo obtain your primary account ID, use the Marketer Entity\
\ with the extraFields=Account param.\n\nDec 22, 2024\nNew Filter Added to reporting endpoints: enabledCampaignsOnly\n\
\nYou can now filter data to include only active campaigns by using the enabledCampaignsOnly field when using our reporting\
\ endpoints (promoted content, Periodic, publishers, sections etc).\n\n- \nCurrent Default Value: false\n\n- \nFuture\
\ Default Value: true (effective end of January 2025)\n\nPlease note that while the current default value for en"
contact:
name: Outbrain Developer Center
url: https://developer.outbrain.com
servers:
- url: https://api.outbrain.com/amplify/v0.1
description: Production Server
tags:
- name: Authentications
description: 'Token
Obtaining a token should be your 1st step toward using Amplify API. You need to include it in all further requests using
the HTTP Header OB-TOKEN-V1.
In order to protect your privacy, the tokens are valid for a period of 30 days. You will not be able to access Amplify
API using an expired token.
You can generate as many tokens as you wish. Generating a new token does not invalidate older tokens.
When a user password or email are changed in the Create Token Page all tokens
generated prior to the change are revoked and a new token must be generated.
How to obtain a token ?
There are 2 ways to obtain a token
via web interface
Simply go to your Amplify API Token Page, fill in your password, hit generate, and you will get your token.
If you can''t see Amplify API Token form, this means that your username doesn''t have access to the Amplify API. To register
for the Amplify API please fil'
- name: Users
description: 'User represents a single person''s access to Outbrain services and to the site my.outbrain.com.
A User is permitted to one or more Marketer accounts, each marketer with a role that specifies the user permissions.'
- name: Marketers
description: 'Marketers are representatives of Teads customers. A single Marketer object may control campaigns for more
than one end-buyer.
Marketers cannot be created via the API and must be created via the site or by an Outbrain Account Manager.'
- name: Multiple Conversions
description: 'Multiple Conversions gives the ability to track any of the actions a user takes after clicking through to
your content.
You can track everything from top of funnel (page landings and time on site) to bottom of funnel (e-book downloads and
product purchases).
Please note: This new feature requires the installation of the new multiple conversion pixel which can be retrieved from
your account on Outbrain.com. If you have the old conversion pixel placed you will need to remove that before installing
the Multiple Conversion Pixel. If both pixels are installed there will be overcounting of data and results will be inaccurate.'
- name: Budgets
description: 'Budget objects represent an amount of money to be spent via the Amplify platform. A single Budget may be shared
among Campaigns (also known as a "shared budget"), though it is more common to have just one Campaign per Budget.
For convenience, Budget objects are often embedded inside the Campaign objects.'
- name: Geo Locations
description: 'GeoLocations are representatives of Outbrain Geographic Locations.
GeoLocations are being used for campaigns to be targeted (or excluded) by geography.
The GeoLocation object has the following attributes:
Property
Type
Semantic
Example
id
String
geoLocation id
aa4ab4c893b9fb5618476cb27f264ef8
geoType
Geo Location Type
geoLocation type
Region
name
String
geoLocation name
Prince Edward Island
canonicalName
String
detailed name
Prince Edward Island, Canada
parent
GeoLocation
The parent of the geoLocation if exists (always a country)
A GeoLocation object'
- name: Interest Targeting
description: 'Interest Targeting gives you the abillity to select your preferred interests categories in your campaign setup.
Then, using our powerful interest insights and predictive technology, we’ll match you with audiences we know are interested
in your desired categories and will surface your content to the people who are most likely to take action.
The Interest Targeting object has the following attributes:
Property
Type
Semantic
Example
id
String
interest id
00b56c21f2ca684e42908474d4bbfe9bf0
name
String
interest name
Animals
canBeTargeted
Boolean
determines whether this interest can be targeted or not (some interests exist just to provide the context / hirarchy of
other interests from the same concept)
true
reachEstimationCount
Number
The estimated daily impressions within this interest for the last 7 days
4173698
subConcepts
Array of Interest Targeting
Will appear if the interest has m'
- name: IAB category Targeting
description: 'IAB category Targeting gives you the abillity to select your preferred IAB categories in your campaign setup.
The IAB category Targeting object has the following attributes:
Property
Type
Semantic
Example
categoryId
String
IAB category id
IAB1-1
categoryName
String
IAB category name
Books & Literature
parentId
String
Parent IAB Category (if exists)
IAB1
pageViews
Number
The number of page views for this category
55115277
children
Array of IAB category
Will appear if this category has more specific sub categories'
- name: Campaigns
description: 'Campaigns contain many PromotedLinks and define Budget, targeting, cpc, etc. Campaign settings apply to the
PromotedLinks contained in a specific Campaign.
The Campaign object has the following attributes:
Property
Type
Semantic
Example
id
String
campaign id.
"00f4b02153ee75f3c9dc4fc128ab041962"
name
String
campaign name.
"My Campaign"
marketerId
String
marketer id.
"00f4b02153ee75f3c9dc4fc128ab041963"
enabled
Boolean
is campaign enabled.
true
cpc
Money
cost per click.
0.58
minimumCpc
Money
the minimal possible cost per click. read-only
0.2
currency
String
The currency of the Budget amount. read-only
"USD"
autoArchived
Boolean
Indicates whether this Campaign is archived.
true
targeting
Targeting Object
See Targeting object.
feeds
Array of RSS feeds
Each feed contains the URL of the rss feed.
autoExpirationOfPromotedLinks
Numeric
A number specifying within how many days Promo'
- name: Segments
description: 'Segments give the ability to segment customers based on their actions, and retarget them with new or existing
campaigns. This translates into your campaigns reaching a highly engaged audience that is more likely to convert and fulfill
your brand''s goals. With this functionality you''ll be able to segment customers in two ways: Audience Retargeting (Type:
PIXEL) and Story Sequencing (Type: CLICKERS).
Please note: The PIXEL feature requires the installation of the Outbrain Custom Audience pixel, which can be retrieved
from your account on Outbrain.com. If you have the old audience pixel installed, you will need to remove that before
installing the new pixel. For additional information regarding obtaining and installing the pixel properly, please visit
our help center here: http://help.outbrain.com/customer/en/portal/articles/2809479-how-can-i-create-custom-audiences'
- name: Sections
description: A Section is a specific content within the publisher's site such as sports, business etc.
- name: PromotedLinks
description: A PromotedLink is the entity that describes a single piece of promoted content. As of April 12, 2021 each campaign
is limited to 30,000 PromotedLinks.
- name: PromotedLinksSequences
description: "Sequences comes in 2 formats:\n\n- \nCarousel - multi-promotedLink format that features CTA buttons, brand\
\ logo, and more. You can use Carousel to tell your brand story, showcase multiple products, and build a sequential message\
\ — with up to 10 images for consumers to swipe through.\n\n- In order to create sequences of this type your campaign’s\
\ creative format must be Carousel (see Campaign creative format)\n- A carousel must have at least 3 promoted links and\
\ up to 10 promoted links in it\n- A campaign can have only 1 carousel\n- Promoted links can’t be duplicated in the same\
\ carousel\n- All promoted links must be in the same language\n- App rating us supported only for sequences of type AppInstall\n\
\n- \nApp Install - gives you the ability to present your promoted link with logo, sponsor, app rating and direct redirect\
\ to google/apple store to download and install the app.\n\n- In order to create seq"
- name: Performance Reporting
description: 'There are a multitude of reporting endpoints that allow you to retrieve metrics at various levels of granularity.
Note: All performance reports have a 10-30 minutes delay, therefore performance metrics that include the current day are
partial.
Rate Limits
Each marketer is limited to 30 requests per minute for the entire performance reporting API. In case of rate limit violation
the response status will be 429 (Too Many Requests).
As of April 12, 2021 performance reporting is limited to a history of 3 years per data request.
Response structure
All reporting endpoints share a common response structure, defined below:
Property
Type
Semantic
Comments
results
Array
Metadata and Metrics of the entities returned.
Metadata is an object containing contextual properties of the report entity. The set of properties is specific for each
end-point.
totalResults
Number
Count of the total results'
- name: Currencies
description: Metadata about the available currencies
- name: Meta Data
description: The Meta Data section represents the various values (Enumarations) that can be provided as part of the different
API end-points
security:
- OBTokenAuth: []
paths:
/login:
get:
operationId: getLogin
summary: via API
description: 'Yes, you can obtain a new token using the Amplify API. Why? API is all about automation, so why not obtain
a new token using the API before your token expires?
This API transaction is the only one in which you need to supply your Outbrain credentials.
Your credentials should be sent using Basic Authentication.
This means that the HTTP Request should include a header:
named Authorization
value: BASIC BASE-64-ENC(YOUR_OUTBRAIN_USER_NAME:YOUR_OUTBRAIN_PASSWORD)
Since all communication to Amplify API are HTTPS, your credentials are safe.
You can try it using curl command (add -v to actually see the Authorization HTTP header:
curl -u YOUR_OUTBRAIN_USER_NAME:YOUR_OUTBRAIN_PASSWORD https://api.outbrain.com/amplify/v0.1/login
Transport Layer Security version 1.2 (TLS 1.2) is mandatory for communication with Amplify API.
You will need to verify that your environment supports TLS 1.2, and if necessary make appropriate updates.
Please note that older versions of curl do not support TLS 1.2 and need to be upgraded.'
tags:
- Authentications
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
OB-TOKEN-V1: IF_YOU_GOT_THIS_TOKEN_IT_MEANS_THAT_YOU_ARE_USING_OUR_MOCK_SERVER__USE_OUTBRAIN_PRODUCTION_SERVER_TO_GET_A_LIVE_TOKEN
'400':
description: Bad Request - the request could not be understood or was missing required parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication failed or the user lacks permission for the requested operation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden - access denied
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found - resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too Many Requests - request exceeded rate limits; see the rate-limit-msec-left header
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/marketers/{marketerId}/users:
get:
operationId: getMarketersMarketerIdUsers
summary: Getting all users permitted to a marketer
description: 'The response contains an array of a user object that has the following attributes:
Property
Type
Semantic
Example
name
String
The User''s name
"full name"
email
String
The User''s email
"a@b.ocm"
creationTime
Time
The time when the user was assigned to the marketer
"2013-01-14 07:19:16"
status
String
The User''s status - ACTIVE, PENDING, DISABLED
"ACTIVE"
invitationId
String
The invitation ID of the user in case the user has a pending invitation
fullName
String
The user''s full name
role
User Role
The user''s role
"ACCOUNT_MANAGER"'
tags:
- Users
parameters:
- name: marketerId
in: path
required: true
schema:
type: string
description: the Marketer's id
example: 00f4b02153ee75f3c9dc4fc128ab041962
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
users:
- name: somename1
email: user1@domain.com
creationTime: '2022-09-20 20:12:23'
status: ACTIVE
fullName: some name1
role: ACCOUNT_MANAGER
- name: somename2
email: user2@domain.com
creationTime: '2022-09-20 20:12:23'
status: PENDING
invitationId: 00f4b02153ee75f3c9dc4fc128ab041962
role: ACCOUNT_MANAGER
headers:
AMPLIFY-REQUEST-ID:
description: Request correlation / rate-limit signal
schema:
type: string
'400':
description: Bad Request - the request could not be understood or was missing required parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication failed or the user lacks permission for the requested operation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden - access denied
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found - resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too Many Requests - request exceeded rate limits; see the rate-limit-msec-left header
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
put:
operationId: updateMarketersMarketerIdUsers
summary: Update marketer's users
description: Update marketer's users allows disabling/enabling a user and updating their role
tags:
- Users
parameters:
- name: marketerId
in: path
required: true
schema:
type: string
description: the Marketer's id
example: 00f4b02153ee75f3c9dc4fc128ab041962
requestBody:
required: true
content:
application/json:
schema:
type: object
example:
- userEmail: a@mydomain.com
enabled: true
role: VIEWER
- userEmail: b@mydomain.com
enabled: true
role: CAMPAIGN_MANAGER
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
users:
- name: somename1
email: a@domain.com
creationTime: '2022-09-20 20:12:23'
status: DISABLED
fullName: some name1
role: ACCOUNT_MANAGER
- name: somename2
email: b@domain.com
creationTime: '2022-09-20 20:12:23'
status: ENABLED
invitationId: 00f4b02153ee75f3c9dc4fc128ab041962
role: VIEWER
headers:
AMPLIFY-REQUEST-ID:
description: Request correlation / rate-limit signal
schema:
type: string
'400':
description: Bad Request - the request could not be understood or was missing required parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication failed or the user lacks permission for the requested operation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden - access denied
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found - resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too Many Requests - request exceeded rate limits; see the rate-limit-msec-left header
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
operationId: deleteMarketersMarketerIdUsers
summary: Remove a user from a marketer
description: This endpoint allows revoking a permission for a user to access a marketer.
tags:
- Users
parameters:
- name: marketerId
in: path
required: true
schema:
type: string
description: the Marketer's id
example: 00f4b02153ee75f3c9dc4fc128ab041962
- name: email
in: query
required: false
schema:
type: string
responses:
'200':
description: Successful response
headers:
AMPLIFY-REQUEST-ID:
description: Request correlation / rate-limit signal
schema:
type: string
'400':
description: Bad Request - the request could not be understood or was missing required parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication failed or the user lacks permission for the requested operation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden - access denied
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found - resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too Many Requests - request exceeded rate limits; see the rate-limit-msec-left header
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/invitations/multiple:
post:
operationId: createInvitationsMultiple
summary: Providing access for new users to a marketer
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
type: object
example:
- marketerId: 007514a95316bh6fe7ejc0cad101c23343
invitedEmail: a@mydomain.com
role: ADMIN
- marketerId: 007514a95316bh6fe7ejc0cad101c23343
invitedEmail: b@mydomain.com
role: VIEWER
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: string
example: "[\n {\n \"id\": \"007514a95316bh6fe7ejc0cad101c23343\",\n \"invitingUserEmail\":\
\ \"admin@mydomain.com\",\n \"invitedEmail\": \"a@mydomain.com\",\n \"marketerId\": \"007514a95316bh6fe7ejc0cad101c23343\"\
,\n \"status\": \"Pending\",\n \"creationDate\": \"2022-06-01\",\n \"marketerName\":\
\ \"Some marketer\",\n \"role\": \"ADMIN\"\n },\n \"id\": \"007514a95316bh6fe7ejc0cad101c23343\"\
,\n \"invitingUserEmail\": \"admin@mydomain.com\",\n \"invitedEmail\": \"b@mydomain.com\",\n\
\ \"marketerId\": \"007514a95316bh6fe7ejc0cad101c23343\",\n \"status\": \"Pending\",\n \
\ \"creationDate\": \"2022-06-01\",\n \"marketerName\": \"Some marketer\",\n \"role\": \"\
VIEWER\"\n }\n]"
headers:
AMPLIFY-REQUEST-ID:
description: Request correlation / rate-limit signal
schema:
type: string
'400':
description: Bad Request - the request could not be understood or was missing required parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication failed or the user lacks permission for the requested operation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden - access denied
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found - resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too Many Requests - request exceeded rate limits; see the rate-limit-msec-left header
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/invitations:
put:
operationId: updateInvitations
summary: Delete pending invitations
description: Delete pending invitations should be done by updating the status of the invitations to REVOKED
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
type: object
example:
invitations:
- id: 007514a95316bh6fe7ejc0cad101c23349
status: REVOKED
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: string
example: "{\n \"updatedInvitations\":\n [\n {\n \"operationStatus\":\n \
\ {\n \"status\": \"Success\"\n }\n \"invitation\":\n \
\ {\n \"id\": \"007514a95316bh6fe7ejc0cad101c23349\",\n \"invitingUserEmail\"\
: \"admin@mydomain.com\",\n \"invitedEmail\": \"a@mydomain.com\",\n \"marketerId\"\
: \"007514a95316bh6fe7ejc0cad101c23343\",\n \"status\": \"Revoked\",\n \"creationDate\"\
: \"2022-06-01\",\n \"marketerName\": \"Some marketer\",\n \"role\": \"ADMIN\"\
\n },\n \"id\": \"007514a95316bh6fe7ejc0cad101c23349\"\n }\n ]\n}"
headers:
AMPLIFY-REQUEST-ID:
description: Request correlation / rate-limit signal
schema:
type: string
'400':
description: Bad Request - the request could not be understood or was missing required parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication failed or the user lacks permission for the requested operation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden - access denied
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found - resource was
# --- truncated at 32 KB (580 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/outbrain/refs/heads/main/openapi/outbrain-amplify-api-full-openapi.yml