The core of Prebid Server contains the foundational code needed for header bidding. Any functionality that could be considered an add-on or that covers a special case is covered by modules.
If you’re looking for bidder adapter parameters, see Bidders’ Params.
There are two types of modules:
The full list of modules:
| Module | Description | Type | PBS-Go | PBS-Java | 
|---|---|---|---|---|
| ORTB2 Blocking | Support bidders that aren’t full-service SSPs. | general | ||
| Confiant Ad Quality | Scans bid responses for security and quality issues. | general | ||
| US Gen Privacy | Links with the Activity Controls to process GPP strings to determine whether an activity should be allowed. | privacy | ||
| US Custom Logic Privacy | Similar to the US Gen Privacy module, but publishers define their own interpretation of the GPP string. | 
      privacy | ||
| Richmedia Filter | Can filter MRAID creatives from the bid stream. | validation | 
Once a Prebid Server host company decides which modules they want to support, here’s how installation works:
Note that modules are currently an all-or-nothing nothing from a code perspective.
mvn clean package --file extra/pom.xml
The execution plan details:
If you want the module to run on every request regardless of account, this is a
host-level config you should place in application.yaml. If the module should
be active only for certain accounts, you’ll need to place the plan in the account-specific config.
To define a plan, you’ll need to know the following module details, which should be available in the module documentation:
Here’s an example application.yaml entry:
hooks: 
  host-execution-plan: >   # these hooks are always run for all accounts
  {
    "endpoints": {
      "/openrtb2/auction": { # endpoint
        "stages": {
          "entrypoint": { # stage
            "groups": [
              {
                "timeout": 3,  # in milliseconds
                "hook-sequence": [
                  {
                    "modulecode": "modulecode1",
                    "hookimplcode": "hook1"
                  },
                  {
                    "modulecode": "modulecode2",
                    "hookimplcode": "hook2"
                  }
                ]
              },{ // this group depends on the results of the first group
                    "timeout": 5,  # in milliseconds
                    "hook-sequence": [
                  {
                    "modulecode": "modulecode3",
                    "hookimplcode": "hook3-depends-on-hook1"
                  }
                ]
              }
            ]
          }
        }
      }
    }
  }
  # these hooks are run for all accounts unless overridden by DB config
  default-account-execution-plan: >
  {
   "endpoints": {
      "/openrtb2/amp": { # endpoint
        "stages": {
          "raw-auction-request": { # stage
            "groups": [
              {
                "timeout": 5,
                "hook-sequence": [
                  {
                    "modulecode": "modulecodeA",
                    "hookimplcode": "hookA"
                  }
                ]
              }
            ]
          }
        }
      }
    }
  }
Modules may require configuration at startup or during the request:
Privacy modules are already built into the code base. They just need to be linked to the
relevant ‘Activity’ using the privacyreg directive as described in the Activity Control reference.