Outbrain Multiple Conversions API

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.

Operations 5

GET /conversionEvents/{id} Retrieve a Single Conversion Event #
PUT /conversionEvents/{id} Update a Conversion Event #
POST /marketers/{marketerId}/conversionEvents Create a Conversion Event #
GET /marketers/{id}/conversionEvents Retrieve all Marketer's Conversion Events #
GET /marketers/{id}/engagementMetrics Retrieve Marketer's Engagement Metrics #

Work with this as data

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-multiple-conversions-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 Specification

outbrain-multiple-conversions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Outbrain Amplify Multiple Conversions 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: 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.'
paths:
  /conversionEvents/{id}:
    get:
      operationId: getConversionEventsId
      summary: Retrieve a Single Conversion Event
      description: 'The Conversion Event object has the following attributes:


        Property

        Type

        Semantic

        Example


        id

        String

        The id of this Conversion Event. read-only

        "00f4b02153ee75f3c9dc4fc128ab041962"


        name

        String

        The name of this Conversion Event.

        "My Conversion Event"


        type

        ConversionEventType

        The type of this Conversion Event

        URL_BASED


        url

        String

        The url configured for this Conversion Event

        "/thank-you"


        marketerId

        String

        The marketer Id of this Conversion Event

        "00f4b02153ee75f3c9dc4fc128ab041962"


        enabled

        Boolean

        Indicates if the Conversion Event is enabled You can have up to 60 enabled conversions at one time

        true


        conversionWindow

        Integer

        The conversion window you’re looking to track. This is the time it takes from click to conversion. The default is 60 days, but you may select any whole number between 1-60.

        50


        includeInConversions

        Boolean

        Indicates if you’d like to include these conversions in your total conversions reporting

        true


        trackingStatus

        TrackingStatus

        Indicates if the conversion event is active or inactive

        ACTIVE


        category

        ConversionEventCategory

        The category of this Conversion Event

        PURCHASE


        orderValue

        OrderValue

        The value of your conversion to help track overall ROI.

        ''{"value": 100, "currency": "USD"}''


        segment

        ConversionEventSegment

        The conversion segment, if such exists. read-only


        lastModified

        Date

        The time when the Conversion Event was last modified. read-only

        "2013-03-16 10:32:31"


        creationTime

        Date

        The time when the Conversion Event was created. read-only

        "2013-01-18 07:19:16"


        timeOnPageSettingValue

        Integer

        Relevant only for TIME_ON_PAGE engagment conversions. The number of seconds a user stays on a page with Outbrain pixel, that will trigger the conversion TIME_ON_PAGE

        30


        scrollDepthSettingValue

        Integer

        Relevant only for SCROLL_DEPTH engagment conversions. The percentage of scroll (out of the total webview) a user performs on a page with Outbrain pixel, that will trigger the conversion SCROLL_DEPTH

        50


        source

        String

        Relevant only for SCROLL_DEPTH and TIME_ON_PAGE engagment conversions. The should always say "OUTBRAIN"

        "OUTBRAIN"'
      tags:
      - Multiple Conversions
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: the Conversion Event's id
        example: 00f4b02153ee75f3c9dc4fc128ab041962
      responses:
        '200':
          description: JSON representation of Marketer Resource
          content:
            application/json:
              schema:
                type: object
              example:
                enabled: true
                url: /thank-you
                includeInConversions: true
                creationTime: '2017-06-07 22:39:21'
                conversionWindow: 60
                lastModified: '2017-06-09 01:49:33'
                type: URL_BASED
                marketerId: 007514a95316bh6fe7ejc0cad101c23343
                name: My Conversion Event
                trackingStatus: ACTIVE
                category: PURCHASE
                id: 00177f47ba1ff1118s86dd1898adbb6e07
          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: updateConversionEventsId
      summary: Update a Conversion Event
      description: 'The Conversion Event object has the following attributes:


        Property

        Type

        Semantic

        Example


        id

        String

        The id of this Conversion Event. read-only

        "00f4b02153ee75f3c9dc4fc128ab041962"


        name

        String

        The name of this Conversion Event.

        "My Conversion Event"


        type

        ConversionEventType

        The type of this Conversion Event

        URL_BASED


        url

        String

        The url configured for this Conversion Event

        "/thank-you"


        marketerId

        String

        The marketer Id of this Conversion Event

        "00f4b02153ee75f3c9dc4fc128ab041962"


        enabled

        Boolean

        Indicates if the Conversion Event is enabled You can have up to 60 enabled conversions at one time

        true


        conversionWindow

        Integer

        The conversion window you’re looking to track. This is the time it takes from click to conversion. The default is 60 days, but you may select any whole number between 1-60.

        50


        includeInConversions

        Boolean

        Indicates if you’d like to include these conversions in your total conversions reporting

        true


        trackingStatus

        TrackingStatus

        Indicates if the conversion event is active or inactive

        ACTIVE


        category

        ConversionEventCategory

        The category of this Conversion Event

        PURCHASE


        orderValue

        OrderValue

        The value of your conversion to help track overall ROI.

        ''{"value": 100, "currency": "USD"}''


        segment

        ConversionEventSegment

        The conversion segment, if such exists. read-only


        lastModified

        Date

        The time when the Conversion Event was last modified. read-only

        "2013-03-16 10:32:31"


        creationTime

        Date

        The time when the Conversion Event was created. read-only

        "2013-01-18 07:19:16"


        timeOnPageSettingValue

        Integer

        Relevant only for TIME_ON_PAGE engagment conversions. The number of seconds a user stays on a page with Outbrain pixel, that will trigger the conversion TIME_ON_PAGE

        30


        scrollDepthSettingValue

        Integer

        Relevant only for SCROLL_DEPTH engagment conversions. The percentage of scroll (out of the total webview) a user performs on a page with Outbrain pixel, that will trigger the conversion SCROLL_DEPTH

        50


        source

        String

        Relevant only for SCROLL_DEPTH and TIME_ON_PAGE engagment conversions. The should always say "OUTBRAIN"

        "OUTBRAIN"'
      tags:
      - Multiple Conversions
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: the Conversion Event's id
        example: 00f4b02153ee75f3c9dc4fc128ab041962
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
            example:
              enabled: false
              url: /registration
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
              example:
                enabled: false
                url: /registration
                includeInConversions: true
                creationTime: '2017-06-07 22:39:21'
                conversionWindow: 60
                lastModified: '2017-06-09 01:49:33'
                type: URL_BASED
                marketerId: 007514a95316bh6fe7ejc0cad101c23343
                name: My Conversion Event
                trackingStatus: ACTIVE
                category: PURCHASE
                id: 00177f47ba1ff1118s86dd1898adbb6e07
          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'
  /marketers/{marketerId}/conversionEvents:
    post:
      operationId: createMarketersMarketerIdConversionEvents
      summary: Create a Conversion Event
      description: 'The Conversion Event object has the following attributes:


        Property

        Type

        Semantic

        Example


        id

        String

        The id of this Conversion Event. read-only

        "00f4b02153ee75f3c9dc4fc128ab041962"


        name

        String

        The name of this Conversion Event.

        "My Conversion Event"


        type

        ConversionEventType

        The type of this Conversion Event

        URL_BASED


        url

        String

        The url configured for this Conversion Event

        "/thank-you"


        marketerId

        String

        The marketer Id of this Conversion Event

        "00f4b02153ee75f3c9dc4fc128ab041962"


        enabled

        Boolean

        Indicates if the Conversion Event is enabled You can have up to 60 enabled conversions at one time

        true


        conversionWindow

        Integer

        The conversion window you’re looking to track. This is the time it takes from click to conversion. The default is 60 days, but you may select any whole number between 1-60.

        50


        includeInConversions

        Boolean

        Indicates if you’d like to include these conversions in your total conversions reporting

        true


        trackingStatus

        TrackingStatus

        Indicates if the conversion event is active or inactive

        ACTIVE


        category

        ConversionEventCategory

        The category of this Conversion Event

        PURCHASE


        orderValue

        OrderValue

        The value of your conversion to help track overall ROI.

        ''{"value": 100, "currency": "USD"}''


        segment

        ConversionEventSegment

        The conversion segment, if such exists. read-only


        lastModified

        Date

        The time when the Conversion Event was last modified. read-only

        "2013-03-16 10:32:31"


        creationTime

        Date

        The time when the Conversion Event was created. read-only

        "2013-01-18 07:19:16"


        timeOnPageSettingValue

        Integer

        Relevant only for TIME_ON_PAGE engagment conversions. The number of seconds a user stays on a page with Outbrain pixel, that will trigger the conversion TIME_ON_PAGE

        30


        scrollDepthSettingValue

        Integer

        Relevant only for SCROLL_DEPTH engagment conversions. The percentage of scroll (out of the total webview) a user performs on a page with Outbrain pixel, that will trigger the conversion SCROLL_DEPTH

        50


        source

        String

        Relevant only for SCROLL_DEPTH and TIME_ON_PAGE engagment conversions. The should always say "OUTBRAIN"

        "OUTBRAIN"'
      tags:
      - Multiple Conversions
      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:
              enabled: true
              url: /thank-you
              includeInConversions: true
              type: URL_BASED
              name: My Conversion Event
              conversionWindow: 60
              category: PURCHASE
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
              example:
                enabled: true
                url: /thank-you
                includeInConversions: true
                creationTime: '2017-06-07 22:39:21'
                conversionWindow: 60
                lastModified: '2017-06-09 01:49:33'
                type: URL_BASED
                marketerId: 007514a95316bh6fe7ejc0cad101c23343
                name: My Conversion Event
                trackingStatus: ACTIVE
                category: PURCHASE
                id: 00177f47ba1ff1118s86dd1898adbb6e07
          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'
  /marketers/{id}/conversionEvents:
    get:
      operationId: getMarketersIdConversionEvents
      summary: Retrieve all Marketer's Conversion Events
      description: Retrieve all Conversion Events associated with the current Marketer.
      tags:
      - Multiple Conversions
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
              example:
                count: 2
                conversionEvents:
                - trackingStatus: ACTIVE
                  name: My Conversion 1
                  enabled: false
                  conversionWindow: 60
                  id: 00d5d192ea6d0aaa2201d8fseb7a2da14a
                  type: URL_BASED
                  category: PURCHASE
                  includeInConversions: true
                  marketerId: 0075c1a9s316bf6ff7e3cgcad101c23343
                  url: /registration
                  lastModified: '2017-06-07 00:26:09'
                  usingNewTag: false
                  creationTime: '2017-02-23 04:35:40'
                - name: My Conversion 2
                  trackingStatus: INACTIVE
                  conversionWindow: 20
                  enabled: true
                  includeInConversions: true
                  type: EVENT_BASED
                  category: PURCHASE
                  id: 00793fd2a8b7w77b937aafe290987s2522
                  creationTime: '2017-06-07 00:25:56'
                  lastModified: '2017-06-14 21:56:01'
                  marketerId: 0075csa9331fbf6fe7e3cgcad101c23343
          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'
  /marketers/{id}/engagementMetrics:
    get:
      operationId: getMarketersIdEngagementMetrics
      summary: Retrieve Marketer's Engagement Metrics
      description: 'Retrieve all Engagement Metrics avaialable for optimization associated with the current Marketer.

        Relevant only for Marketers with a successful Google Analytics integration for Engagement Bid Strategy (EBS).'
      tags:
      - Multiple Conversions
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
              example:
                conversionEvents:
                - id: 009f0588d62d67df8bca855ed9ae756d34
                  name: Session Duration
                  type: ENGAGEMENT
                  marketerId: 00fd3edf18cbf93f937ae9a81cbcba3e62
                  enabled: true
                  conversionWindow: 60
                  includeInConversions: true
                  trackingStatus: INACTIVE
                  category: OTHER
                  description: Engagement external conversion
                  isValuable: false
                  creationTime: '2022-07-18 12:08:51'
                  lastModified: '2022-07-18 12:08:51'
                - id: 00d95d0ca7fdfaa6388199695c2ecde330
                  name: Pages Per Session
                  type: ENGAGEMENT
                  marketerId: 00fd3edf18cbf93f937ae9a81cbcba3e62
                  enabled: true
                  conversionWindow: 60
                  includeInConversions: true
                  trackingStatus: INACTIVE
                  category: OTHER
                  description: Engagement external conversion
                  isValuable: false
                  creationTime: '2022-07-18 12:08:52'
                  lastModified: '2022-07-18 12:08:52'
                - id: 0064fa01ca9a08a621087b7885776b4284
                  name: Bounce Rate
                  type: ENGAGEMENT
                  marketerId: 00fd3edf18cbf93f937ae9a81cbcba3e62
                  enabled: true
                  conversionWindow: 60
                  includeInConversions: true
                  trackingStatus: INACTIVE
                  category: OTHER
                  description: Engagement external conversion
                  isValuable: false
                  creationTime: '2022-07-18 12:08:52'
                  lastModified: '2022-07-18 12:08:52'
                count: 3
          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'
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.