diff --git a/prebid-server/developers/add-new-bidder-go.md b/prebid-server/developers/add-new-bidder-go.md index 02f3eb8ae0..b18d63acdb 100644 --- a/prebid-server/developers/add-new-bidder-go.md +++ b/prebid-server/developers/add-new-bidder-go.md @@ -8,16 +8,16 @@ title: Prebid Server | Developers | Building a Bid Adapter (Go) # Prebid Server - New Bid Adapter (Go) {: .no_toc} -Thank you for your valuable contribution of a bid adapter to the open source Prebid Server project. Each new adapter expands the monetization possibilities for publishers and provides greater options to maximize their inventory's potential. We truly appreciate your support in making this ecosystem thrive! +- TOC +{:toc } + +Thank you for your contribution of a bid adapter to the open source Prebid Server project. Each new adapter expands the monetization possibilities for publishers and provides greater options to maximize their inventory's potential. We appreciate your support in making this ecosystem thrive! This document guides you through the process of developing a new bid adapter for your bidding server. We encourage you to look at [existing bid adapters](https://github.com/prebid/prebid-server/tree/master/adapters) for working examples and practical guidance. You can ask us questions by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new). {: .alert.alert-info :} There are two implementations of Prebid Server: [PBS-Go](https://github.com/prebid/prebid-server) and [PBS-Java](https://github.com/prebid/prebid-server-java). We recommend you build new adapters for PBS-Go and allow us to port it to PBS-Java within a couple of months. If you'd like to build both yourself, please also follow these [instructions for building an adapter in PBS-Java](/prebid-server/developers/add-new-bidder-java.html). -* TOC -{:toc } - ## Overview Bid adapters are responsible for translating a 'Prebid-flavored' OpenRTB Bid Request to your bidding server's protocol and mapping your server's response to a Prebid-flavored response. @@ -71,15 +71,15 @@ We are proud to run the Prebid Server project as a transparent and trustworthy h **Please take the time to read the rules in full.** Below is a summary of some of the rules which apply to your Prebid Server bid adapter: -* Adapters must include maintainer information with a group email address for Prebid.org to contact for ongoing support and maintenance. -* Your bidder's endpoint domain name cannot be fully variable. We will accept endpoint domains that include account IDs, but we do not like them, and Prebid Server host companies may disable adapters using this approach if there are technical issues with it. We will not accept hostnames that have a required dynamic element for the purpose of sending traffic to different geographic regions. -* If you have a client-side adapter, all parameters (including biddercodes and aliases) must be consistent between your client- and server-side adapters. This allows publishers to utilize the PBJS [s2sTesting module](/dev-docs/modules/s2sTesting.html). -* Adapters must not modify bids from demand partners, except to either change the bid from gross to net or from one currency to another. -* Adapters must use the functions provided by the core framework for all external communication. Initiation of any form of network connection outside of what is provided by the core framework is strictly prohibited. No exceptions will be made for this rule. -* Adapters must support the creation of multiple concurrent instances. This means adapters may not mutate global or package scoped variables. -* Bidding server endpoints should prefer secure HTTPS to protect user privacy and should allow keep alive connections (preferably with HTTP/2 support) to increase host performance. -* Adapters must annotate the bid response with the proper media type, ideally based on the response from the bidding server. -* Bid adapters must not create their own transaction IDs or overwrite the tids supplied by Prebid. +- Adapters must include maintainer information with a group email address for Prebid.org to contact for ongoing support and maintenance. +- Your bidder's endpoint domain name cannot be fully variable. We will accept endpoint domains that include account IDs, but we do not like them, and Prebid Server host companies may disable adapters using this approach if there are technical issues with it. We will not accept hostnames that have a required dynamic element for the purpose of sending traffic to different geographic regions. +- If you have a client-side adapter, all parameters (including biddercodes and aliases) must be consistent between your client- and server-side adapters. This allows publishers to utilize the PBJS [s2sTesting module](/dev-docs/modules/s2sTesting.html). +- Adapters must not modify bids from demand partners, except to either change the bid from gross to net or from one currency to another. +- Adapters must use the functions provided by the core framework for all external communication. Initiation of any form of network connection outside of what is provided by the core framework is strictly prohibited. No exceptions will be made for this rule. +- Adapters must support the creation of multiple concurrent instances. This means adapters may not mutate global or package scoped variables. +- Bidding server endpoints should prefer secure HTTPS to protect user privacy and should allow keep alive connections (preferably with HTTP/2 support) to increase host performance. +- Adapters must annotate the bid response with the proper media type, ideally based on the response from the bidding server. +- Bid adapters must not create their own transaction IDs or overwrite the tids supplied by Prebid. {: .alert.alert-warning :} Failure to follow the rules will lead to delays in approving your adapter. If you'd like to discuss an exception to a rule, please make your request by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new). @@ -150,20 +150,20 @@ userSync: Modify this template for your bid adapter: -* The endpoint can be static if you only have one data center or use a Global Load Balancer as described in 'Planning Your Adapter' above. -* Remove the `endpointCompression` value if your bidding server does not accept gzip compressed bid requests. Setting this value to `gzip` will save on network bandwidth at the expense of slightly increased cpu and memory usage for the host. -* The `geoscope` parameter is not currently read programmatically. Instead, it's intended to be used by PBS host companies to disable your adapter in geographic regions where you don't do business. However, we may make a module for this someday, so we ask that you follow this syntax for `geoscope`: - * YAML array - * Values can be either a 3-letter country code, "EEA", or "global". (EEA means European Economic Area) - * Values can be negated. e.g. "!EEA" -* Change the maintainer email address to a group distribution list on your ad server's domain. A distribution list is preferred over an individual mailbox to allow for robustness, as roles and team members naturally change. -* Change the `gvlVendorID` from the sample value of `42` to the id of your bidding server as registered with the [GDPR Global Vendor List (GVL)](https://iabeurope.eu/tcf-for-vendors/), or remove this line entirely if your bidding server is not registered with IAB Europe. -* Remove the `openrtb.version` parameter if your adapter cannot receive the OpenRTB 2.6 data model. In this case, Prebid Server will downgrade values back to their 2.5 ext locations. New OpenRTB 2.6 fields are still passed to adapters. -* If absolutely necessary, change the `modifyingVastXmlAllowed` value to `false` to opt-out of [video impression tracking](https://github.com/prebid/prebid-server/issues/1015). However, please note that Prebid Server host companies depend on this feature being enabled to track video analytics. This feature has been live for many years with no known problems. -* Remove the `capabilities` (app/site/dooh) and `mediaTypes` (banner/video/audio/native) combinations which your adapter does not support. (Note: 'dooh' is [Digital Out Of Home](/prebid-server/use-cases/pbs-dooh.html)) -* Add an `extra_info` field if you'd like to pass additional values that your adapter may need. See below for an example. -* Add the `disabled` flag and set it to true if you would like to unregister adapter from the core. It's enabled by default. -* Follow the [User Sync Configuration](#user-sync-configuration) documentation below to configure the endpoints for your bid adapter, or remove the `userSync` section if not supported. +- The endpoint can be static if you only have one data center or use a Global Load Balancer as described in 'Planning Your Adapter' above. +- Remove the `endpointCompression` value if your bidding server does not accept gzip compressed bid requests. Setting this value to `gzip` will save on network bandwidth at the expense of slightly increased cpu and memory usage for the host. +- The `geoscope` parameter is not currently read programmatically. Instead, it's intended to be used by PBS host companies to disable your adapter in geographic regions where you don't do business. However, we may make a module for this someday, so we ask that you follow this syntax for `geoscope`: + - YAML array + - Values can be either a 3-letter country code, "EEA", or "global". (EEA means European Economic Area) + - Values can be negated. e.g. "!EEA" +- Change the maintainer email address to a group distribution list on your ad server's domain. A distribution list is preferred over an individual mailbox to allow for robustness, as roles and team members naturally change. +- Change the `gvlVendorID` from the sample value of `42` to the id of your bidding server as registered with the [GDPR Global Vendor List (GVL)](https://iabeurope.eu/tcf-for-vendors/), or remove this line entirely if your bidding server is not registered with IAB Europe. +- Remove the `openrtb.version` parameter if your adapter cannot receive the OpenRTB 2.6 data model. In this case, Prebid Server will downgrade values back to their 2.5 ext locations. New OpenRTB 2.6 fields are still passed to adapters. +- If absolutely necessary, change the `modifyingVastXmlAllowed` value to `false` to opt-out of [video impression tracking](https://github.com/prebid/prebid-server/issues/1015). However, please note that Prebid Server host companies depend on this feature being enabled to track video analytics. This feature has been live for many years with no known problems. +- Remove the `capabilities` (app/site/dooh) and `mediaTypes` (banner/video/audio/native) combinations which your adapter does not support. (Note: 'dooh' is [Digital Out Of Home](/prebid-server/use-cases/pbs-dooh.html)) +- Add an `extra_info` field if you'd like to pass additional values that your adapter may need. See below for an example. +- Add the `disabled` flag and set it to true if you would like to unregister adapter from the core. It's enabled by default. +- Follow the [User Sync Configuration](#user-sync-configuration) documentation below to configure the endpoints for your bid adapter, or remove the `userSync` section if not supported. #### Additional Bidder Info Examples @@ -355,7 +355,7 @@ Publishers will provide extra information using an OpenRTB 2.x Bid Request Exten We request you do not duplicate information already present in the [OpenRTB 2.x Bid Request specification](https://github.com/InteractiveAdvertisingBureau/openrtb2.x) or already part of an established Prebid convention. For example, your bidder parameters should not include first party data, bid floors, schain, video parameters, referrer information, or privacy consent including COPPA, CCPA, and GDPR TCF. For video parameters in particular, you must prefer the OpenRTB 2.x Bid Request standard of `request.imp[].video`. {: .alert.alert-warning :} -You may not try so set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. +You may not try to set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. Create a file with the path `static/bidder-params/{bidder}.json` and use [JSON Schema](https://json-schema.org/understanding-json-schema/) to define your bidder parameters. Prebid Server requires this file for every adapter, even if yours doesn't require bidder parameters (see the 'no parameters' example at the end of this section). @@ -545,8 +545,8 @@ Each adapter has its own directory (a 'package' in Go parlance) for all code and Create a file with the path `adapters/{bidder}/{bidder}.go`. Your bid adapter code will need to implement and export: -* The `adapters.Builder` method to create a new instance of the adapter based on the host configuration. -* The `adapters.Bidder` interface consisting of the `MakeRequests` method to create outgoing requests to your bidding server and the `MakeBids` method to create bid responses. +- The `adapters.Builder` method to create a new instance of the adapter based on the host configuration. +- The `adapters.Bidder` interface consisting of the `MakeRequests` method to create outgoing requests to your bidding server and the `MakeBids` method to create bid responses. {: .alert.alert-info :} **ACCESS MODIFIERS:** Go has only two kinds of access modifiers, exported and private, which are scoped at the package level. The access modifier is encoded into the name of the type or method. Names starting with an upper case letter are exported whereas names starting with a lower case letter are private. Please only export the three required methods and keep everything else private. @@ -667,8 +667,8 @@ The first argument, `bidderName`, is the name of the bidder being built. This ma The second argument, `config`, is all the configuration values set for your adapter. However, not all of this information is intended for use by the `Builder` method. The only two fields relevant here are `config.Endpoint` and `config.ExtraAdapterInfo`: -* `config.Endpoint` is the base url of your bidding server and may be interpreted as either a literal address or as a templated macro to support dynamic paths. -* `config.ExtraAdapterInfo` is an optional setting may be used for any other values your adapter may need, such as an application token or publisher allow/deny list. You may interpret this string however you like, although JSON is a common choice. +- `config.Endpoint` is the base url of your bidding server and may be interpreted as either a literal address or as a templated macro to support dynamic paths. +- `config.ExtraAdapterInfo` is an optional setting may be used for any other values your adapter may need, such as an application token or publisher allow/deny list. You may interpret this string however you like, although JSON is a common choice. The third argument, `server`, is a set of host configs. It can be passed in two different ways. One way is to pass this info in the auction request itself at the path `ext.prebid.server` (i.e. `ext.prebid.server.datacenter`). The second way is to pass this info as a configuration data structure. @@ -770,9 +770,9 @@ if request.Imp[i].W == nil && request.Imp[i].H == nil && len(request.Imp[i].Form The second argument, `requestInfo`, is for extra information and helper methods provided by the core framework. This includes: -* `requestInfo.PbsEntryPoint` to access the entry point of the bid request, commonly used to determine if the request is for AMP or for a [Long Form Video Ad Pod](/dev-docs/modules/adpod.html). -* `requestInfo.GlobalPrivacyControlHeader` to read the value of the `Sec-GPC` Global Privacy Control (GPC) header of the bid request. -* `requestInfo.ConvertCurrency` a method to perform currency conversions. +- `requestInfo.PbsEntryPoint` to access the entry point of the bid request, commonly used to determine if the request is for AMP or for a [Long Form Video Ad Pod](/dev-docs/modules/adpod.html). +- `requestInfo.GlobalPrivacyControlHeader` to read the value of the `Sec-GPC` Global Privacy Control (GPC) header of the bid request. +- `requestInfo.ConvertCurrency` a method to perform currency conversions. The `MakeRequests` method is expected to return a slice (similar to a C# `List` or a Java `ArrayList`) of `adapters.RequestData` objects representing the HTTP calls to be sent to your bidding server and a slice of type `error` for any issues encountered creating them. If there are no HTTP calls or if there are no errors, please return `nil` for both return values. Please do not add `nil` items in the slices. @@ -1076,8 +1076,8 @@ aliasOf: "appnexus" Notes: -* The alias name must be unique for the first 6 chars as noted above for biddercodes. -* This process will be simplified someday. +- The alias name must be unique for the first 6 chars as noted above for biddercodes. +- This process will be simplified someday. {: .alert.alert-info :} Note on aliases and TCF Global Vendor List IDs: if an alias entry does not have its own GVLID but wishes to claim GDPR support, @@ -1128,8 +1128,8 @@ You should use an obviously fake endpoint for your tests. There's no reason to u Each test case should be written in its own JSON file with a succinct, yet descriptive, name of what's being tested. The files should be located in either: -* `adapters/{bidder}/{bidder}test/exemplary/` for straight forward "happy path" tests. We expect to see tests here for each supported media type. -* `adapters/{bidder}/{bidder}test/supplemental` for tests which produce errors or cover more complicated scenarios. +- `adapters/{bidder}/{bidder}test/exemplary/` for straight forward "happy path" tests. We expect to see tests here for each supported media type. +- `adapters/{bidder}/{bidder}test/supplemental` for tests which produce errors or cover more complicated scenarios. The format of a JSON test is as follows: @@ -1382,41 +1382,41 @@ The Example Bidding adapter requires setup before beginning. Please contact us a Notes on the metadata fields: -* Add `pbs: true`. If you also have a [Prebid.js bid adapter](/dev-docs/bidder-adaptor.html), add `pbjs: true`. Default is false for both. -* If you're on the IAB's Global Vendor List, place your ID in `gvl_id`. No default. -* If you support the IAB's TCF protocol and have a GVL ID, you may add `tcfeu_supported: true`. Default is false. -* If you support the US Privacy consentManagementUsp module, add `usp_supported: true`. Default is false. -* If you support one or more userId modules, add `userId: (list of supported vendors)`. Default is none. -* If you support video, native, or audio mediaTypes add `media_types: video, native, audio`. Note that display is added by default. If you don't support display, add "no-display" as the first entry, e.g. `media_types: no-display, native`. No defaults. -* If you support COPPA, add `coppa_supported: true`. Default is false. -* If you support sections within the IAB's GPP consent string, add `gpp_sids:' and then which sections you support: tcfeu, tcfca, usnat, usstate_all, usp -* If you support the [supply chain](/dev-docs/modules/schain.html) feature, add `schain_supported: true`. Default is false. -* If you support adding a demand chain on the bid response, add `dchain_supported: true`. Default is false. -* If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. No default. -* If your bidder supports mobile apps, set `pbs_app_supported: true`. No default value. -* If your bidder supports deals, set `deals_supported: true`. No default value. -* If your bidder supports floors, set `floors_supported: true`. No default value. -* If you support first party data, you must document what exactly is supported and then you may set `fpd_supported: true`. No default value. -* If you support any OpenRTB blocking parameters, you must document what exactly is supported and then you may set `ortb_blocking_supported` to ‘true’,’partial’, or ‘false’. No default value. In order to set ‘true’, you must support: bcat, badv, battr, and bapp. -* Let publishers know how you support multiformat requests -- those with more than one mediatype (e.g. both banner and video). Here are the options: will-bid-on-any, will-bid-on-one, will-not-bid -* If you're a member of Prebid.org, add `prebid_member: true`. Default is false. +- Add `pbs: true`. If you also have a [Prebid.js bid adapter](/dev-docs/bidder-adaptor.html), add `pbjs: true`. Default is false for both. +- If you're on the IAB's Global Vendor List, place your ID in `gvl_id`. No default. +- If you support the IAB's TCF protocol and have a GVL ID, you may add `tcfeu_supported: true`. Default is false. +- If you support the US Privacy consentManagementUsp module, add `usp_supported: true`. Default is false. +- If you support one or more userId modules, add `userId: (list of supported vendors)`. Default is none. +- If you support video, native, or audio mediaTypes add `media_types: video, native, audio`. Note that display is added by default. If you don't support display, add "no-display" as the first entry, e.g. `media_types: no-display, native`. No defaults. +- If you support COPPA, add `coppa_supported: true`. Default is false. +- If you support sections within the IAB's GPP consent string, add `gpp_sids:' and then which sections you support: tcfeu, tcfca, usnat, usstate_all, usp +- If you support the [supply chain](/dev-docs/modules/schain.html) feature, add `schain_supported: true`. Default is false. +- If you support adding a demand chain on the bid response, add `dchain_supported: true`. Default is false. +- If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. No default. +- If your bidder supports mobile apps, set `pbs_app_supported: true`. No default value. +- If your bidder supports deals, set `deals_supported: true`. No default value. +- If your bidder supports floors, set `floors_supported: true`. No default value. +- If you support first party data, you must document what exactly is supported and then you may set `fpd_supported: true`. No default value. +- If you support any OpenRTB blocking parameters, you must document what exactly is supported and then you may set `ortb_blocking_supported` to ‘true’,’partial’, or ‘false’. No default value. In order to set ‘true’, you must support: bcat, badv, battr, and bapp. +- Let publishers know how you support multiformat requests -- those with more than one mediatype (e.g. both banner and video). Here are the options: will-bid-on-any, will-bid-on-one, will-not-bid +- If you're a member of Prebid.org, add `prebid_member: true`. Default is false. ## File Checklist -* Bidder Info - * `static/bidder-info/{bidder}.yaml` -* Bidder Parameters - * `static/bidder-params/{bidder}.json` - * `openrtb_ext/imp_{bidder}.go` - * `adapters/{bidder}/params_test.go` -* Adapter Code - * `adapters/{bidder}/{bidder}.go` - * `adapters/{bidder}/{bidder}_test.go` - * `adapters/{bidder}/{bidder}test/exemplary/*.json` - * `adapters/{bidder}/{bidder}test/supplemental/*.json` -* Register With The Core - * `openrtb_ext/bidders.go` - * `exchange/adapter_builders.go` +- Bidder Info + - `static/bidder-info/{bidder}.yaml` +- Bidder Parameters + - `static/bidder-params/{bidder}.json` + - `openrtb_ext/imp_{bidder}.go` + - `adapters/{bidder}/params_test.go` +- Adapter Code + - `adapters/{bidder}/{bidder}.go` + - `adapters/{bidder}/{bidder}_test.go` + - `adapters/{bidder}/{bidder}test/exemplary/*.json` + - `adapters/{bidder}/{bidder}test/supplemental/*.json` +- Register With The Core + - `openrtb_ext/bidders.go` + - `exchange/adapter_builders.go` ## Contribute diff --git a/prebid-server/developers/add-new-bidder-java.md b/prebid-server/developers/add-new-bidder-java.md index 18b20e2b0b..f0aa1b5f3c 100644 --- a/prebid-server/developers/add-new-bidder-java.md +++ b/prebid-server/developers/add-new-bidder-java.md @@ -11,7 +11,7 @@ title: Prebid Server | Developers | Adding a New Bidder - TOC {:toc } -Thank you for your valuable contribution of a bid adapter to the open source Prebid Server project. Each new adapter expands the monetization possibilities for publishers and provides greater options to maximize their inventory's potential. We truly appreciate your support in making this ecosystem thrive! +Thank you for your contribution of a bid adapter to the open source Prebid Server project. Each new adapter expands the monetization possibilities for publishers and provides greater options to maximize their inventory's potential. We appreciate your support in making this ecosystem thrive! This document guides you through the process of developing a new bid adapter for your bidding server. We encourage you to look at [existing bid adapters](https://github.com/prebid/prebid-server-java/tree/master/src/main/java/org/prebid/server/bidder) for working examples and practical guidance. You can ask us questions by [submitting a GitHub issue](https://github.com/prebid/prebid-server-java/issues/new). @@ -267,7 +267,7 @@ Publishers will provide extra information using an OpenRTB 2.x Bid Request Exten We request that you do not duplicate information that is already present in the [OpenRTB 2.x request](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md) or is already part of an established Prebid convention. For example, your bidder parameters should not include first party data, bid floors, schain, video parameters, referrer information, or privacy consent including COPPA, CCPA, and GDPR TCF. For video parameters in particular, you must prefer the OpenRTB 2.x Bid Request standard of `request.imp[].video`. {: .alert.alert-warning :} -**ENDPOINT NOTE:** You may not try so set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. +You may not try to set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. Create a file with the path `static/bidder-params/{bidder}.json` using [JSON Schema](https://json-schema.org/understanding-json-schema/) to define your bidder parameters. Prebid Server requires this file for every adapter, even if yours doesn't require bidder parameters (see the 'no parameters' example at the end of this section). @@ -428,11 +428,11 @@ Please follow [Java standard naming convention](https://www.oracle.com/java/tech Now it's time to write your bid adapter code. -Each adapter has its own directory (a 'package' in java parlance) for all code and tests associated with translating an OpenRTB 2.x Bid Request to your bidding server's protocol and mapping your server's response to an OpenRTB 2.x Bid Response. The use of separate packages provide each adapter with its own naming scope to avoid conflicts and gives the freedom to organize files as you best see fit (although we make suggestions in this guide). +Each adapter has its own directory (a 'package' in java parlance) for all code and tests associated with translating an OpenRTB 2.x Bid Request to your bidding server's protocol and mapping your server's response to an OpenRTB 2.x Bid Response. The use of separate packages provides each adapter with its own naming scope to avoid conflicts and gives the freedom to organize files as you best see fit (although we make suggestions in this guide). Create a file with the path `org.prebid.server.bidder.{bidder}/{bidder}Bidder.java`. Your bid adapter code will need to implement Bidder interface where `T` is a model which will represent HttpRequest body. -- The `Bidder` interface consisting of the `MakeHttpRequests` method to create outgoing requests to your bidding server and the `MakeBids` method to create bid responses. +- The `Bidder` interface consists of the `MakeHttpRequests` method to create outgoing requests to your bidding server and the `MakeBids` method to create bid responses. Here is a reference implementation for a bidding server which uses the OpenRTB 2.x protocol: