Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/outbrain-geo-locations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Outbrain Amplify Geo Locations 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\nThe 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\nYou 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\nFeb 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:\nDaily 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
security:
- OBTokenAuth: []
tags:
- 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'
paths:
/locations/search:
get:
operationId: getLocationsSearch
summary: Search GeoLocations
description: 'This endpoint allows to search a single geo location term.
Results can be filtered by supplying additional query parameters.'
tags:
- Geo Locations
parameters:
- name: term
in: query
required: true
schema:
type: string
description: The search term
example: United States
- name: limit
in: query
required: false
schema:
type: number
description: The limit of the search query. Default is 300
example: '6'
- name: include
in: query
required: false
schema:
type: string
description: which geoTypes to return
example: Region
- name: exclude
in: query
required: false
schema:
type: string
description: which geoTypes to filter out of the results
example: Country
- name: exactMatch
in: query
required: false
schema:
type: boolean
description: search the exact term when true. The default is false
example: 'true'
- name: country
in: query
required: false
schema:
type: string
description: return results from this country only
example: United States
- name: locationsVersion
in: query
required: false
schema:
type: string
description: The regions inventory to search in. V1 for FIPS and V2 for ISO-3166. The default is V1
example: V2
responses:
'200':
description: Array of all GeoLocations which complies to the search
content:
application/json:
schema:
type: object
example:
geoLocations:
- id: fc4deb5112fb4415a9edacdf4aafb0d8
name: United States
canonicalName: United States
geoType: Country
code: US
- id: c20768bb56a25c22299c38801e935c3a
name: United Kingdom
geoType: Country
canonicalName: United Kingdom
code: GB
excludedGeoLocations:
- name: Alabama
id: 5d01f8eab282fcd783aff5c09bb8fc7a
parent:
geoType: Country
canonicalName: United States
name: United States
id: fc4deb5112fb4415a9edacdf4aafb0d8
geoType: Region
canonicalName: Alabama, United States
- parent:
geoType: Country
canonicalName: United States
name: United States
id: fc4deb5112fb4415a9edacdf4aafb0d8
geoType: DMA
canonicalName: Eugene OR, United States
name: Eugene OR
id: be482a98eeddfc2009ac2f1c181eac79
- parent:
canonicalName: United States
geoType: Country
id: fc4deb5112fb4415a9edacdf4aafb0d8
name: United States
geoType: PostalCode
canonicalName: 96373, FPO, , United States
name: 96373, FPO
id: 419268adfd7cc1751233df8337b97671
'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'
/locations/search/multiple:
post:
operationId: createLocationsSearchMultiple
summary: Search Multiple GeoLocation Terms
description: This endpoint allows to search multiple geo locations terms.
tags:
- Geo Locations
requestBody:
required: true
content:
application/json:
schema:
type: object
example:
searchItems:
- include:
- Country
term: France
limit: 100
exactMatch: true
- include:
- Country
term: Belgium
limit: 100
exactMatch: true
- include:
- Region
term: BW
limit: 100
exactMatch: true
locationsVersion: V2
responses:
'200':
description: Array of all GeoLocations which complies to the search
content:
application/json:
schema:
type: string
example: "{\n \"successes\" : [\n {\n \"searchItem\" : {\n \"term\" : \"France\",\n \"limit\" : 100,\n \"include\" : [\"Country\"],\n \"exactMatch\" : true\n },\n \"geoLocations\" : [\n {\n \"id\" : \"104001b51d842051ccd77ba5a4ff6290\",\n \"geoType\" :\" Country\",\n \"name\" : \"France\",\n \"canonicalName\" : \"France\",\n \"code\" :\" FR\"\n }\n ]\n },\n {\n \"searchItem\" : {\n \"term\" : \"Belgium\",\n \"limit\" : 100,\n \"include\" : [\"Country\"],\n \"exactMatch\" : true\n },\n \"geoLocations\" : [\n {\n \"id\" : \"5e0140a71b69e5f6af0798901a340a68\",\n \"geoType\" : \"Country\",\n \"name\" : \"Belgium\",\n \"canonicalName\" : \"Belgium\",\n \"code\" : \"BE\"\n }\n ]\n }\n ],\n \"failures\" : [\n {\n \"searchItem\" : {\n \"term\" : \"BW\",\n \"limit\" : 100,\n \"include\" : [\"Region\"],\n \"exactMatch\" : false\n },\n \"failureReasons\": [\n \"reason 1\", \"reason 2\"\n ]\n }\n ],\n \"successesCount\" : 2,\n \"failuresCount\" : 1\n}\n<a name=\"supported_languages\"></a>\n"
'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'
/metadata/supportedLanguages:
get:
operationId: getMetadataSupportedLanguages
summary: Retrieve all supported language
description: Returns all supported languages
tags:
- Geo Locations
responses:
'200':
description: All supported languages.
content:
application/json:
schema:
type: array
items:
type: object
example:
- name: Slovenian
code: sl
- name: Lithuanian
code: lt
- name: Indonesian
code: id
- name: Norwegian
code: 'no'
'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'
components:
schemas:
Error:
type: object
description: Error envelope returned on 400/401/403/404/429 responses.
properties:
moreInfo:
type: string
description: Short machine-readable hint identifying the failing operation.
errorMessage:
type: string
description: Human-readable error message.
examples:
- moreInfo: get-budget
errorMessage: access denied
securitySchemes:
OBTokenAuth:
type: apiKey
in: header
name: OB-TOKEN-V1
description: Token obtained from GET /login (HTTP Basic) or from https://my.outbrain.com/create-token. Valid for 30 days.
BasicAuth:
type: http
scheme: basic
description: HTTP Basic credentials used only on GET /login to obtain an OB-TOKEN-V1 token.