Bidding Platform
The project goal is to provide an unique program to contact every SSP without know the differences between all of them.
Why this project?
This comes because we want to have a free and fully open-source solution to allow users to make bids, contact sellers the easiest way.
API
/request
endpoint
We expect a JSON body request on the /request
endpoint with some values in it.
Legend:
-
✅ Required -
❌ Not required -
➖ Preferred
Key | Description | Value | Required |
---|---|---|---|
account |
Define account informations | - | |
account.domain |
The domain that instanciate the request | domain.com |
|
account.name |
The name you want to set for the domain | AwesomeDomain |
|
account.page |
The page that tries to request the bidding-platform | https://www.domain.com/my/page.html |
|
account.pid |
The unique ID for the website | 12345-67890-13579-24680 |
|
consent |
Define different consents | - | |
consent.addtl |
Refer to the Addtl consent | 1~1.2.3.4.5.6.7.8.9 |
|
consent.gdpr |
Refer to the GDPR consent (UE) | CPUMr... |
|
consent.us_privacy |
Refer to the GDPR consent (UE) | 1--- |
|
currency |
Array of acepted currencies | ["USD","EUR"] |
|
eids |
Define users informations | - | |
eids.source |
The user source domain | another.com |
|
eids.uids |
The user identifiers on this domain | - | |
eids.uids[x].id |
The user id identifier on this domain | user_id_1 |
|
eids.uids[x].atype |
The user atype identifier on this domain | 1 |
|
placements |
The placements informations | - | |
placements[x].id |
The placement identifier | - | |
placements[x].bid_id |
The bid request for this placement | - | |
placements[x].type |
The bid request for this placement | video , banner |
|
placements[x].sizes |
Authorized sizes for this placement | ["640x480"] |
|
placements[x].params |
Custom parameters for this placement, see the table below to view the required ones depending the type | - | |
placements[x].supply_chain |
Define the supply chain informations, see the openrtb supply_chain object for more informations | - | |
placements[x].supply_chain.ver |
Supply chain version | 1.0 |
|
If your placement is a video
type:
Key | Description | Value | Required |
---|---|---|---|
placements[x].params.mimes |
Allowed mime types for the current video placement | ["video/mp4"] |
|
placements[x].params.outstream |
Enable/Disable the outstream | false |
|
placements[x].params.api |
API versions to use | [1, 2] |
|
placements[x].params.startdelay |
Delay before start | 0 |
|
placements[x].params.protocols |
Protocols to use | [1, 2, 3, 4, 5, 6, 7, 8] |
|
placements[x].params.duration |
Durations to set the min and the max | - | |
placements[x].params.duration.max |
Max duration in seconds of the video | 1 |
|
placements[x].params.duration.min |
Min duration in seconds of the video | 240 |
|
placements[x].params.linearity |
Enable/Disable the linearity | 1 |
|
placements[x].params.position |
The video position | 1 |
|
If your placement is a banner
type:
Key | Description | Value | Required |
---|---|---|---|
placements[x].params.position |
The banner position | 1 |
|
Here is the anonymized payload expected on the /request
endpoint.
{
"account": {
"domain": "domain.com",
"name": "YourDomain",
"page": "https://www.domain.com/my/page.html",
"pid": "{{ uuid }}"
},
"consent": {
"addtl": "1~1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19",
"gdpr": "{{ grpd_consent }}",
"us_privacy": "1---"
},
"currency": [
"USD",
"EUR"
],
"eids": [
{
"source": "another.com",
"uids": [
{
"id": user_id_1",
"atype": 1
}
]
},
{
"source": "foo.com",
"uids":
[
{
"id": "user_id_2",
"atype": 1,
"ext": {
"linkType": 2,
"abTestingControlGroup": false
}
}
]
},
{
"source": "bar.org",
"uids": [
{
"id": "user_id_3",
"atype": 1
}
]
}
],
"placements": [
{
"id": "video_id",
"bid_id": "my_bid_id",
"type": "video",
"sizes": [
"640x480"
],
"params": {
"mimes": [
"video/mp4"
],
"outstream": false,
"api": [
1,
2
],
"startdelay": 0,
"protocols": [
1,
2,
3,
4,
5,
6,
7,
8
],
"duration": {
"min": 1,
"max": 120
},
"linearity": 1,
"position": 1
}
}
],
"supply_chain": {
"ver": "1.0",
"complete": 1,
"nodes": [
{
"asi": "domain.com",
"sid": "2434",
"hp": 1
}
]
}
}
Configuration
The bidding-platform project comes with it's own configuration file named configuration.yml
.
Key | Description | Value | Required |
---|---|---|---|
cors |
CORS headers configuration | - | |
cors.allow_origin |
CORS allow origin strategy | * |
|
connectors |
Connectors to request | - | |
connectors.{connector_name} |
The connector to contact | bidswitch , xandr |
|
connectors.{connector_name}.base_url |
Connector base URL | https://the.domain.net |
|
connectors.{connector_name}.endpoint |
Connector endpoint | /the_endpoint |
|
file |
Files configuration | - | |
file.geo |
Geoip MMDB filepath | geoip.mmdb |
|
video |
Default video configuration | - | |
video.min |
Minimal default video duration | 30s |
|
video.max |
Maximum default video duration | 10s |
|
Supported providers
At the moment this tool only support Bitswitch and Xandr integrations. In a near future we plan to add more providers.
Run the project
git clone https://github.com/darkweak/bidding-platform
cd bidding-platform
make setup
Or extract manually the geoip.tar.gz file to get the geoip.mmdb maxmind database file and copy the configuration.sample.yml
file into configuration.yml
.
After that you would be able to run the command below to start the project.
go run main.go