RTB Architecture

    Prebid Server Bidder Adapters: The List, How They Work and How to Add One

    Published · Last updated
    Next scheduled review:

    A Prebid Server bidder adapter is the code that turns one server-side auction into a request for a single SSP or exchange and maps its bids back. PBS-Go ships 281 core adapters plus 116 aliases (GitHub, 30 October 2026). Each adapter is a YAML info file, a JSON parameter schema, adapter code and JSON-driven tests.

    Key terms on this page: bidder adapter · Prebid Server · SSP · OpenRTB · TCF · cookie sync · ads.txt

    Contents

    Key facts

    Jump to the table

    Definition

    Bidder adapter (Prebid Server): a module that builds outgoing HTTP requests to one demand partner from Prebid Server's validated OpenRTB request, and turns that partner's response into typed bids for the auction. In PBS-Go, these are the MakeRequests and MakeBids methods of the adapters.Bidder interface (Prebid.org, new bid adapter for Go, accessed 9 November 2026).

    An adapter never opens its own connections. Prebid's guide forbids "directly initiating any form of network communication", so the core can pool connections and record metrics for every bidder in the same way.

    How to read the Prebid Server bidder list

    The same exchanges that bid in the browser usually bid on the server too, but through separate code; the browser side is explained in header bidding explained. Prebid publishes the adapter list as a searchable page and a CSV file (Prebid Server bidder params). Each row comes from a bidder's documentation page, not from the code. So the list tells you what a bidder says it supports, and the repository tells you what a given build contains.

    4 of 4 rows

    Columns (4)

    PBS-Go static/bidder-info (30 Oct 2026)

    Bidder info files

    397

    116

    PBS-Java bidder-config (4 Nov 2026)

    Adapter config files, plus aliases inside them

    266

    103 more

    Prebid docs CSV (3 Nov 2026)

    Doc pages marked server-adapter: yes

    395

    83

    Prebid docs CSV (3 Nov 2026)

    Doc pages marked client-adapter: yes

    733

    n/d

    PBS-Go static/bidder-info (30 Oct 2026)

    What it counts

    Bidder info files

    Total

    397

    Of which aliases

    116

    PBS-Java bidder-config (4 Nov 2026)

    What it counts

    Adapter config files, plus aliases inside them

    Total

    266

    Of which aliases

    103 more

    Prebid docs CSV (3 Nov 2026)

    What it counts

    Doc pages marked server-adapter: yes

    Total

    395

    Of which aliases

    83

    Prebid docs CSV (3 Nov 2026)

    What it counts

    Doc pages marked client-adapter: yes

    Total

    733

    Of which aliases

    n/d

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    Sources: the PBS-Go and PBS-Java repositories and bidder-data.csv, counted by us on 9 November 2026. The Java alias figure is our count of entries under aliases: in the YAML files.

    The CSV also shows what server-side bidders declare. Of the 395 entries, 392 accept banner, 344 video and 235 native. Only 182 say "yes" to mobile apps, while 194 say "check with bidder". And 238 declare TCF EU support (bidder-data.csv). Treat these as self-declared. Confirm with the bidder before you rely on a column.

    Names can also differ between builds. In PBS-Go, magnite is an alias of the core rubicon adapter (magnite.yaml). PBS-Java 4.0.0 made magnite the core adapter and rubicon the alias (PBS-Java 4.0.0, 6 August 2026). A running server answers the question for itself. PBS-Go serves GET /info/bidders and GET /info/bidders/{name} (router.go).

    What an adapter is made of

    The two builds split an adapter into similar parts with different file names.

    7 of 7 rows

    Columns (3)

    Bidder info: endpoint, GVL ID, media types, user sync

    static/bidder-info/{bidder}.yaml

    resources/bidder-config/{bidder}.yaml

    Parameter schema

    static/bidder-params/{bidder}.json

    resources/static/bidder-params/{bidder}.json

    Parameter type

    openrtb_ext/imp_{bidder}.go

    ExtImp{Bidder}.java

    Adapter code

    adapters/{bidder}/{bidder}.go

    bidder/{bidder}/{Bidder}Bidder.java

    Unit tests

    {bidder}_test.go, params_test.go, {bidder}test/exemplary/*.json, supplemental/*.json

    {Bidder}BidderTest.java

    Integration test

    n/a

    it/{Bidder}Test.java plus four JSON fixtures

    Registration

    openrtb_ext/bidders.go, exchange/adapter_builders.go

    spring/config/bidder/{Bidder}Configuration.java

    Bidder info: endpoint, GVL ID, media types, user sync

    PBS-Go file

    static/bidder-info/{bidder}.yaml

    PBS-Java file

    resources/bidder-config/{bidder}.yaml

    Parameter schema

    PBS-Go file

    static/bidder-params/{bidder}.json

    PBS-Java file

    resources/static/bidder-params/{bidder}.json

    Parameter type

    PBS-Go file

    openrtb_ext/imp_{bidder}.go

    PBS-Java file

    ExtImp{Bidder}.java

    Adapter code

    PBS-Go file

    adapters/{bidder}/{bidder}.go

    PBS-Java file

    bidder/{bidder}/{Bidder}Bidder.java

    Unit tests

    PBS-Go file

    {bidder}_test.go, params_test.go, {bidder}test/exemplary/*.json, supplemental/*.json

    PBS-Java file

    {Bidder}BidderTest.java

    Integration test

    PBS-Go file

    n/a

    PBS-Java file

    it/{Bidder}Test.java plus four JSON fixtures

    Registration

    PBS-Go file

    openrtb_ext/bidders.go, exchange/adapter_builders.go

    PBS-Java file

    spring/config/bidder/{Bidder}Configuration.java

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    Sources: file checklists in Prebid's guides for Go and Java, accessed 9 November 2026.

    The bidder info file, annotated

    The bidder info file is where a host learns how to reach you. This PBS-Go example is for an imaginary bidder, examplebidder. The keys follow Prebid's template.

    # static/bidder-info/examplebidder.yaml (PBS-Go 4.11.x)
    endpoint: "https://REGION.bid.example.com/openrtb2"   # hosts swap REGION per data centre
    endpointCompression: gzip                             # remove if your server cannot accept gzip
    geoscope:                                             # read by hosts, not by code (yet)
      - USA
      - "!EEA"
    maintainer:
      email: "prebid-maintainer@example.com"              # a group list, not a person
    gvlVendorID: 9999                                     # placeholder; use your real IAB Europe GVL ID or delete the line
    modifyingVastXmlAllowed: true                         # lets hosts add video impression tracking
    openrtb:
      version: 2.6                                        # remove if you only accept the 2.5 model
    capabilities:
      app:
        mediaTypes: [banner, video]
      site:
        mediaTypes: [banner, video, native]
    userSync:
      redirect:
        url: "https://sync.example.com/match?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect={{.RedirectURL}}"
        userMacro: "$UID"                                 # the macro your sync endpoint fills with its user ID

    Prebid explains each choice in its guide. The geoscope list accepts three-letter country codes, "EEA" or "global", and a value can be negated with "!". Leaving out openrtb.version makes Prebid Server downgrade 2.6 fields back to their 2.5 extension locations (new bid adapter for Go). The userSync block feeds the sync flow described in Prebid Server cookie sync.

    PBS-Java uses different names for the same facts. PubMatic's two files show the mapping (Go pubmatic.yaml; Java bidder-config).

    6 of 6 rows

    Columns (3)

    Compression

    endpointCompression

    endpoint-compression

    GVL ID

    gvlVendorID

    meta-info.vendor-id

    Media types

    capabilities.site.mediaTypes

    meta-info.site-media-types

    OpenRTB version

    openrtb.version

    ortb-version

    Sync macros

    {{.GDPR}}, {{.RedirectURL}}

    {gdpr}, {redirect_url}

    Cookie family

    the bidder name, or userSync.key

    usersync.cookie-family-name

    Compression

    PBS-Go key

    endpointCompression

    PBS-Java key

    endpoint-compression

    GVL ID

    PBS-Go key

    gvlVendorID

    PBS-Java key

    meta-info.vendor-id

    Media types

    PBS-Go key

    capabilities.site.mediaTypes

    PBS-Java key

    meta-info.site-media-types

    OpenRTB version

    PBS-Go key

    openrtb.version

    PBS-Java key

    ortb-version

    Sync macros

    PBS-Go key

    {{.GDPR}}, {{.RedirectURL}}

    PBS-Java key

    {gdpr}, {redirect_url}

    Cookie family

    PBS-Go key

    the bidder name, or userSync.key

    PBS-Java key

    usersync.cookie-family-name

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    The parameter schema

    Each adapter publishes a JSON Schema for its bidder parameters. Prebid Server validates imp[].ext.prebid.bidder.{bidder} against it before the adapter runs, so the adapter can assume valid input (new bid adapter for Go). PubMatic's schema, for example, requires only publisherId (pubmatic.json).

    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Examplebidder Adapter Params",
      "description": "A schema which validates params accepted by the Examplebidder adapter",
      "type": "object",
      "properties": {
        "placementId": { "type": "string", "minLength": 1, "description": "Placement ID issued by Examplebidder" },
        "bidFloor": { "type": "number", "minimum": 0, "description": "Optional floor in USD CPM" }
      },
      "required": ["placementId"]
    }

    If you also have a Prebid.js adapter, Prebid asks you to use the same name and the same parameters, so publishers can move a bidder between browser and server without new IDs.

    The adapter code

    A PBS-Go adapter is a Builder function plus two methods. This skeleton shows the shape; the full version, with media-type detection and status-code handling, is in Prebid's guide.

    package examplebidder
    import (
    	"github.com/prebid/openrtb/v20/openrtb2"
    	"github.com/prebid/prebid-server/v4/adapters"
    	"github.com/prebid/prebid-server/v4/config"
    	"github.com/prebid/prebid-server/v4/openrtb_ext"
    	"github.com/prebid/prebid-server/v4/util/jsonutil"
    )
    type adapter struct{ endpoint string }
    // Builder is registered in exchange/adapter_builders.go.
    func Builder(bidderName openrtb_ext.BidderName, cfg config.Adapter, server config.Server) (adapters.Bidder, error) {
    	return &adapter{endpoint: cfg.Endpoint}, nil
    }
    // MakeRequests returns the HTTP calls; the core sends them.
    func (a *adapter) MakeRequests(request *openrtb2.BidRequest, info *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
    	body, err := jsonutil.Marshal(request)
    	if err != nil {
    		return nil, []error{err}
    	}
    	return []*adapters.RequestData{{
    		Method: "POST",
    		Uri:    a.endpoint,
    		Body:   body,
    		ImpIDs: openrtb_ext.GetImpIDs(request.Imp),
    	}}, nil
    }
    // MakeBids maps one HTTP response to typed bids (banner, video, native, audio).
    func (a *adapter) MakeBids(request *openrtb2.BidRequest, reqData *adapters.RequestData, resp *adapters.ResponseData) (*adapters.BidderResponse, []error) {
    	// Check resp.StatusCode, unmarshal with jsonutil, set BidType from bid.MType.
    	return nil, nil
    }

    Three rules from the guide shape this code. The request object holds pointers to shared memory, so copy before you change anything other than request.Imp. Use jsonutil.Marshal and jsonutil.Unmarshal, not the standard library. And let the core handle gzip; do not set compression headers yourself.

    PBS-Java follows the same pattern with makeHttpRequests and makeBids. Its porting guide asks for "the same functionality as the Go adapter" and warns that "the PBS-Go team is more lenient" about what adapters may do (bid adapter porting guide, accessed 9 November 2026).

    Testing: JSON in, JSON out

    PBS-Go tests adapters with JSON files instead of hand-written mocks. Happy paths go in exemplary/, one per media type; errors and edge cases go in supplemental/. A short Go test calls adapterstest.RunJSONBidderTest over the folder, as PubMatic's does (pubmatic_test.go). This is a complete exemplary banner test for the imaginary bidder.

    {
      "mockBidRequest": {
        "id": "test-request-id",
        "imp": [
          {
            "id": "imp-1",
            "banner": { "format": [ { "w": 300, "h": 250 } ] },
            "ext": { "bidder": { "placementId": "pl-123" } }
          }
        ]
      },
      "httpCalls": [
        {
          "expectedRequest": {
            "uri": "https://us-east.bid.example.com/openrtb2",
            "body": {
              "id": "test-request-id",
              "imp": [
                {
                  "id": "imp-1",
                  "banner": { "format": [ { "w": 300, "h": 250 } ] },
                  "ext": { "bidder": { "placementId": "pl-123" } }
                }
              ]
            },
            "impIDs": ["imp-1"]
          },
          "mockResponse": {
            "status": 200,
            "body": {
              "id": "test-request-id",
              "cur": "USD",
              "seatbid": [
                {
                  "seat": "examplebidder",
                  "bid": [
                    { "id": "bid-1", "impid": "imp-1", "price": 1.25, "adm": "<div>ad</div>", "crid": "cr-1", "w": 300, "h": 250, "mtype": 1 }
                  ]
                }
              ]
            }
          }
        }
      ],
      "expectedBidResponses": [
        {
          "currency": "USD",
          "bids": [
            {
              "bid": { "id": "bid-1", "impid": "imp-1", "price": 1.25, "adm": "<div>ad</div>", "crid": "cr-1", "w": 300, "h": 250, "mtype": 1 },
              "type": "banner"
            }
          ]
        }
      ]
    }

    The mockBidRequest, httpCalls and expectedBidResponses fields are required. Expected errors go in expectedMakeRequestsErrors and expectedMakeBidsErrors, compared as literal text or a regex (new bid adapter for Go). Run the same checks as the project's CI with ./validate.sh --nofmt --cov --race 10. Prebid says its guidance usually yields 90% to 95% coverage, but it does not enforce a threshold.

    Then test by hand. Start the server, post an auction with "test": 1 to /openrtb2/auction, and read ext.debug.httpcalls for your bidder. For user sync, save an ID through /setuid and confirm it appears in the outgoing request. The debug fields are explained in Prebid Server analytics and debugging.

    How to add a bidder adapter, step by step

    1. Pick a name. Lower case, no special characters, and not one of the reserved words ae, all, context, data, general, gpid, prebid, skadn or tid. Reuse your Prebid.js bidder code if you have one.
    2. Write the bidder info file and parameter schema. Use a group email and your real GVL ID.
    3. Write the adapter and register it. Add the name to openrtb_ext/bidders.go and the builder to exchange/adapter_builders.go.
    4. Write the JSON tests and run validate.sh.
    5. Open the docs pull request. Prebid will not merge an adapter until a documentation PR exists in the prebid.github.io repository.
    6. Open the code pull request. Title it "New Adapter: {Bidder}". Prebid says you do not need to ask permission or open an issue first.
    7. Stay reachable. Prebid gives maintainers at least a week to review core changes that touch their adapter, and may disable an adapter whose owner stops responding.

    Steps 1 to 7 summarise Prebid's Go adapter guide, accessed 9 November 2026. Prebid recommends building new adapters in Go first; the core team then ports them to Java "within a couple of months" (Prebid Server versions, accessed 9 November 2026). How the two builds differ beyond adapters is in Prebid Server Go vs Java.

    Aliases: one adapter, several names

    An alias reuses an existing adapter under a new bidder code. In PBS-Go, you add a bidder info file that contains aliasOf and the parent name; Prebid asks that alias names stay unique in their first six characters. Since PBS-Go 4.0.0, an alias must declare its own GVL vendor ID explicitly (new bid adapter for Go; v4.0.0 release, 6 March 2026). PBS-Java lists aliases under the parent's aliases: block and made vendor-id mandatory for them in 4.0.0 (PBS-Java 4.0.0).

    Hosts can also define aliases per request, in ext.prebid.aliases, or server-wide in a default request. That is how a publisher routes a second seat on the same exchange without new code. See Prebid Server stored requests for the default request file.

    Enabling adapters as a host

    Because PBS-Go enables most adapters out of the box, a host's first job is to switch off the ones it does not use. That also keeps unused bidders out of cooperative cookie syncs (bidder hosting guidelines).

    # pbs.yaml (PBS-Go): disable what you do not buy from, pin regional endpoints
    adapters:
      examplebidder:
        disabled: true                     # adapters are on unless disabled
      rubicon:
        endpoint: "https://exapi-eu.rubiconproject.com/a/api/exchange"   # EU data centre
    # prebid-config.yaml (PBS-Java): nothing runs until enabled
    adapters:
      pubmatic:
        enabled: true
      ix:
        enabled: true

    Every bidder you enable is also a seller relationship. List it in your ads.txt file and check the supply chain with our ads.txt and sellers.json validator; the reasoning is in schain, ads.txt and sellers.json together.

    On your own deployment, the enabled list is part of the container config shown in our AWS and Docker reference setup, and the self-hosted Prebid Server profile weighs that work against renting. Hosted services such as Magnite Prebid Server, PubMatic OpenWrap and Index Exchange Prebid Server make these choices for you. The Prebid Server self-hosting guide covers making them yourself, and the publisher independence hub explains why that control matters.

    Common mistakes

    1. Running an old build. The June 2026 advisories rate the request-forgery flaw as critical. Upgrade PBS-Go to 4.4.0 or later and PBS-Java to 3.43.0 or later; current releases are PBS-Go 4.11.1 (2 November 2026) and PBS-Java 4.5.0 (4 November 2026).
    2. A personal maintainer email. People leave. Prebid asks for a group distribution list.
    3. Dynamic hostnames in the endpoint. Prebid's FAQ discourages a fully variable domain such as https://{host}/path, and hosts may disable an adapter that uses one (Prebid Server FAQ).
    4. Mutating the shared request. Change a copy, not the pointer you were given, except for request.Imp.
    5. Host-specific defaults. The default endpoint must not depend on a particular host company; Prebid may question suspicious IDs in review.
    6. Leaving every Go adapter enabled. Unused adapters still appear in cooperative syncs and in /info/bidders.
    7. Assuming the list equals the build. A bidder on the docs page may be Go-only, Java-only or an alias. Check the repository for the version you run.

    FAQ

    How many bidders does Prebid Server support?
    On 9 November 2026, PBS-Go's master branch had 281 core adapters and 116 aliases, and PBS-Java's had 266 adapter configs with 103 further aliases. Prebid's docs list marks 395 entries as server-side adapters (bidder-data.csv).
    Where is the Prebid Server adapter list?
    On Prebid's bidder params page, with a downloadable CSV. For the exact set in your build, read static/bidder-info in PBS-Go or bidder-config in PBS-Java, or call /info/bidders on a running PBS-Go server.
    How do I add a bidder adapter to Prebid Server?
    Write the bidder info YAML, the parameter JSON Schema, the adapter code and the JSON tests, then register the adapter. Open a docs pull request first, then the code pull request titled "New Adapter: {Bidder}" (new bid adapter for Go).
    Should I build my adapter in Go or Java first?
    Go. Prebid recommends that demand partners build new adapters in Go, and the core team ports them to Java (Prebid Server versions).
    What is a bidder alias in Prebid Server?
    A second bidder code that reuses an existing adapter's code, with its own name and, since the 4.0 releases, its own declared GVL vendor ID (PBS-Go v4.0.0; PBS-Java 4.0.0). Aliases are how one exchange serves several brands or seats.
    Does my Prebid.js adapter work in Prebid Server?
    No. They are separate code bases, and Prebid Server does not support the same set of bidders as Prebid.js (PBS-Java README). Use the same bidder code and parameters so publishers can switch. The browser side is covered in our Prebid.js guide.

    How this works on owned infrastructure

    The adapter list is, in practice, your demand list: which partners can bid, through which regional endpoint, with which GVL ID and sync URL. A managed host decides which adapters it compiles and enables, and when it upgrades past an advisory. AdSovereign runs Prebid Server inside your own environment, so your engineers choose the build, the enabled adapters and the patch date, and can add a private adapter for your own demand in a fork without waiting on anyone. The integrations page lists the bidder and DSP connections maintained for the stack, and the architecture page shows where adapters sit in the request path.

    Sources

    1. Prebid.org, "Prebid Server: New Bid Adapter (Go)" (accessed 9 November 2026). https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html
    2. Prebid.org, "Prebid Server: Adding a New Bidder (Java)" (accessed 9 November 2026). https://docs.prebid.org/prebid-server/developers/add-new-bidder-java.html
    3. Prebid.org, "Prebid Server Bidder Params" and "bidder-data.csv" (CSV last modified 3 November 2026). https://docs.prebid.org/dev-docs/pbs-bidders.html
    4. Prebid.org, "Bidder-Specific Hosting Guidelines" (accessed 9 November 2026). https://docs.prebid.org/prebid-server/hosting/bidder-specific-guidelines.html
    5. Prebid.org, "Prebid Server Code Bases" (accessed 9 November 2026). https://docs.prebid.org/prebid-server/versions/pbs-versions-overview.html
    6. Prebid.org, "Prebid Server FAQ" (accessed 9 November 2026). https://docs.prebid.org/faq/prebid-server-faq.html
    7. GitHub, prebid/prebid-server, static/bidder-info, static/bidder-params, adapters/pubmatic, router/router.go (master, last commit 30 October 2026). https://github.com/prebid/prebid-server
    8. GitHub, prebid/prebid-server-java, src/main/resources/bidder-config, README and docs/developers/bid-adapter-porting-guide.md (master, last commit 4 November 2026). https://github.com/prebid/prebid-server-java
    9. GitHub, prebid/prebid-server releases v4.0.0 (6 March 2026) and v4.11.1 (2 November 2026). https://github.com/prebid/prebid-server/releases
    10. GitHub, prebid/prebid-server-java releases 4.0.0 (6 August 2026) and 4.5.0 (4 November 2026). https://github.com/prebid/prebid-server-java/releases
    More sources (2)
    1. GitHub Security Advisory GHSA-4p3g-4hcj-wpvx (CVE-2026-54735), prebid/prebid-server (8 June 2026). https://github.com/prebid/prebid-server/security/advisories/GHSA-4p3g-4hcj-wpvx
    2. GitHub Security Advisory GHSA-fr2c-g2f8-qchg (CVE-2026-54734), prebid/prebid-server-java (8 June 2026). https://github.com/prebid/prebid-server-java/security/advisories/GHSA-fr2c-g2f8-qchg