Macros¶
Win price macro¶
In order for the exchange to convey certain information to the winning bidder (e.g., the settlement price), some substitution macros can be inserted into the win notice URL. Prior to calling a win notice URL, BidSwitch will search the specified URL for any of the defined macros and replace them with the appropriate data.
Note
The substitution is simple in the sense that wherever a legal macro is found, it will be replaced without regard to syntax correctness.
Value |
Description |
---|---|
${AUCTION_PRICE} |
Settlement price for the auction. The substituted value will be defined
in CPM. This macro should be used in the
|
Encrypting the Win Price¶
BidSwitch can process encrypted win price macros, and uses the same method as Google. To enable this for your integration, contact BidSwitch support to receive the integrity key and encryption key necessary for doing this. Both of these keys will be sent to you in web-safe base64 strings and they should be web-safe decoded and then base64 decoded by your application.
skU7Ax_NL5pPAFyKdkfZjZz2-VhIN8bjj1rVFOaJ_5o= // Example Encryption key (e_key)
arO23ykdNqUQ5LEoQ0FVmPkBd7xB5CO89PDZlSjpFxo= // Example Integrity key (i_key)
Encryption scheme
The price is encrypted using a custom encryption scheme that is designed to minimize size overhead while ensuring adequate security. The encryption scheme uses a keyed HMAC algorithm to generate a secret pad based on the unique impression event ID. The encrypted price has a fixed length of 28 bytes, comprised of:
16-byte
initialization vector8-bytes
of ciphertext4-byte
integrity signature
The encrypted price must be web-safe base64-encoded, according to RFC 3548, with padding characters omitted. Thus, the 28-byte encrypted price is encoded as a 38 character web-safe base-64 string irrespective of the winning price paid.
# The encrypted format is:
{initialization_vector (16 bytes)}{encrypted_price (8 bytes)}{integrity (4 bytes)}
# Example encrypted prices:
WEp8wQAAAABnFd5EkB2k1wJeFcAj-Z_JVOeGzA # 100 CPI micros
WEp8sQAAAACwF6CtLJrXSRFBM8UiTTIyngN-og # 1900 CPI micros
WEp8nQAAAAADG-y45xxIC1tMWuTjzmDW6HtroQ # 2700 CPI micros
The price needs to be encrypted as
<price xor HMAC(encryption_key, initialization_vector)>
so
decryption calculates HMAC(encryption_key,initialization_vector)
and xor’s with the
encrypted price to reverse the encryption. The integrity stage takes 4 bytes of
<HMAC (integrity_key, price||initialization_vector)>
where ||
is concatenation.
The following example code outlines this, with the following definitions:
iv
initialization vector (16 bytes - unique to the impression)e_key
encryption key (32 bytes - provided by BidSwitch Support)i_key
integrity key (32 bytes - provided by BidSwitch Support)price
(8 bytes - in micros of account currency)hmac(k, d)
SHA-1 HMAC of datad
, using keyk
a || b
stringa
concatenated with stringb
// example code
pad = hmac(e_key, iv) // first 8 bytes
enc_price = pad <xor> price
signature = hmac(i_key, price || iv) // first 4 bytes
final_message = WebSafeBase64Encode( iv || enc_price || signature )
Once enabled, you can return the encrypted price to BidSwitch who can then return it to the winning Buyer in the appropriate manner.
You need to encrypt the value using SHA-1 HMAC. You can do this using a crypto library that supports SHA-1 HMAC, such as Openssl
The encrypted value should be then encoded using web-safe BASE64
# <!-- Example billing URL (burl) which will have macro substituted -->
https://adserver.com/winnotice?impid=102&winprice=${AUCTION_PRICE}
# <!-- Example billing URL (e.g. burl) -->
https://adserver.com/winnotice?impid=102&winprice=1.34
# <!-- Example encrypted billing URL (e.g burl) -->
https://adserver.com/winnotice?impid=102&winprice=WEp8nQAAAAADG-y45xxIC1tMWuTjzmDW6HtroQ
Supplier Click Tracking URL Macro¶
If you require Buyers to include a click tracking macro in their creatives,
Buyers will return this macro in the adm
field. You should replace this
macro with your Supplier click tracking URL. If you do not support click
tracking macros and a Buyer replies with one in the adm
field, BidSwitch will replace it with an empty string.
Note
In the case of video and native inventory, click tracking is handled on
the Supplier side and the click macro is not used, nor is the adm
field.
Value |
Type |
---|---|
${CLICK_URL_ENC} |
A placeholder for the Supplier click tracking URL in URL encoded form.
Required for bids to Suppliers that support click tracking.
No more than one click tracking macro can be used in the |
If requested, the Supplier click URL should be inserted before the landing page in the creative. The landing page URL should be single-escaped. For example, if the Buyer click-URL contains:
http://dsp.com/click?bc=dnJD723&sspclick=${CLICK_URL_ENC}
The macro is replaced by the Supplier and the user clicks the resulting URL
http://dsp.com/click?bc=dnJD723&sspclick=http%3A%2F%2Fssp.com%2Fclick%3Fic%3DbKk4%26lp%3D
The Buyer unescapes the sspclick
parameter and redirects to the target URL
while adding the landing page at the end
http://ssp.com/click?ic=bKks3k4&lp=http%3A%2F%2Fadvertiser.com%2Fhomepage
Note
Some Suppliers may keep the /
and :
characters unencoded, thus the
resulting click URL may take a form such as the following
http://dsp.com/click?bc=dnJD723&sspclick=http://ssp.com%2Fclick%3Fic%3DbKk4%26lp%3D