SSP Integration Guide
Adspin Technology Solutions Limited · IAB TCF Vendor ID 1308
1. Overview
Adspin operates a demand-side platform (DSP) on an in-house, custom-built ad exchange. This guide describes everything a supply partner needs to integrate inbound bid-request traffic with Adspin over OpenRTB. Field paths and behaviours follow the IAB Tech Lab OpenRTB 2.6 specification.
1.1 What Adspin buys
Adspin is an in-app demand partner. We consume mobile in-app inventory across banner, video (including rewarded), and playable formats. We do not currently buy native, web, or desktop inventory.
1.2 Integration at a glance
| Item | Value |
|---|---|
| Platform type | DSP / bidder on a custom-built exchange |
| Protocol | OpenRTB 2.5 and 2.6 (x-openrtb-version recommended) |
| Transport | HTTPS POST, JSON (application/json) |
| Compression | gzip supported on request and response |
| Inventory | Mobile in-app only |
| Formats | Banner, Video, Rewarded, Playable |
| Auction | First Price (at = 1) |
| Settlement | Billing notice (nurl/burl), plaintext ${AUCTION_PRICE} |
| Max response latency | 600 ms |
| IAB TCF Vendor ID | 1308 (Adspin Technology Solutions Limited) |
2. Connection & Transport
Per OpenRTB 2.6 §2.1–2.5, the following transport rules apply. Endpoint URL, QPS limits, and per-region data-centre routing are provided during onboarding and are not published here.
| Parameter | Requirement |
|---|---|
| Method | HTTP POST for all bid requests |
| Scheme | HTTPS required (secure = 1 on inbound impressions) |
| Content-Type | application/json |
| Encoding | gzip supported — set Content-Encoding: gzip on the request and Accept-Encoding: gzip to receive a gzipped response |
| Version header | x-openrtb-version: 2.6 recommended (not required) |
| Keep-Alive | HTTP persistent connections strongly recommended |
| No-bid | HTTP 204, or empty/nbr JSON body per §7.1 |
3. Protocol & Auction
| Field / Behaviour | Adspin | oRTB ref |
|---|---|---|
| OpenRTB version | 2.5 and 2.6 compatible. We gracefully tolerate unknown 2.x fields. | §2.6 |
Auction type (at) | First Price only. We expect at = 1. | §3.2.1 |
Timeout (tmax) | We respond within 600 ms. Send a realistic tmax; requests with tmax below our floor may be abandoned. | §3.2.1 |
Currency (cur) | USD primary. EUR/GBP accepted where offered. | §3.2.1 |
Impression expiry (imp.exp) | Honoured as supplied. We accept cached-impression windows typical of in-app (e.g. banner ~5 min, interstitial ~30 min). Not limited to the 60-min default. | §3.2.4 / §7.2 |
Test (test) | test=1 traffic is treated as non-billable. | §3.2.1 |
4. Supported Inventory & Formats
An impression must carry exactly one of the format objects below. Adspin does not support multi-format impressions; where multiple format objects are present on a single imp, Adspin evaluates banner first.
4.1 Banner
Standard imp.banner per §3.2.6. Exact w/h expected. We do not currently require format-array Flex Ad parameters (wmin/hmin/wratio/hratio).
4.2 Video
Standard in-stream/interstitial imp.video per §3.2.7. All VAST versions supported via protocols. Companion ads via companionad accepted.
4.3 Rewarded
Rewarded inventory is recognised through any of the following signals (we read all three for compatibility across SSPs):
imp.rwdd = 1— the standard oRTB 2.6 flag (§3.2.4).imp.video.ext.rewarded = 1, withimp.video.ext.videotype = "rewarded".imp.banner.ext.rewarded = 1, withimp.banner.ext.bannertype = "rewarded".
Note: Adspin does not provide server-to-server (S2S) reward callbacks; reward delivery is handled by the publisher/SDK.
4.4 Playable
Playable ads are supported across all common delivery methods: MRAID script, inline HTML source, and download URL.
4.5 Not supported
| Format / Feature | Status |
|---|---|
Native (imp.native) | Not supported |
Audio (imp.audio) | Not supported |
| Multi-format impressions | Not supported — banner evaluated first |
| Deeplink / fallback URLs in response | Not supported |
Web / desktop (site object) | Not supported — in-app only |
| S2S rewarded callbacks | Not supported |
5. Identity & Privacy
SpinX, Adspin's DSP division, is a registered IAB TCF vendor (GVL Vendor ID 1308) and consumes the standard privacy and identity signals defined in oRTB 2.6 §2.7, §3.2.3, and §3.2.20.
| Signal | Adspin handling | Field path |
|---|---|---|
| IAB TCF Vendor ID | GVL Vendor ID 1308 (Adspin Technology Solutions Limited). | — |
| GDPR flag | Read. | regs.gdpr / regs.ext.gdpr |
| TCF consent (v2.2) | Read. We do NOT hard-filter requests that carry gdpr=1 without a consent string; senders remain responsible for legal compliance. | user.consent and user.ext.consent |
| US Privacy | Read. | regs.ext.us_privacy |
| GPP | Read where present. | regs.gpp / regs.gpp_sid |
| COPPA | Honoured. | regs.coppa |
| Extended IDs (UID2.0, ID5) | Consumed. Standard source declarations: uidapi.com (UID2.0), id5-sync.com (ID5). | user.ext.eids[].source / .uids[] |
| GPID | Consumed. | imp.ext.gpid |
| IFA / LMT / DNT | Consumed for targeting and compliance. | device.ifa / device.lmt / device.dnt |
| SKAdNetwork | Accepted if present; not required. | imp.ext.skadn |
Under evaluation: AdAttributionKit / AdAuthorizationKit (iOS 17.4+) and ERID for Russian traffic (bid.ext.erid). Contact your Adspin representative for current status before relying on these in an integration.
6. Supply Chain & Quality
| Signal | Adspin handling | Field path |
|---|---|---|
| Supply chain (schain) | Consumed. Read from source.ext.schain; source.schain also read where duplicated. Version 1.0. | §3.2.25 |
| OMID / viewability | Consumed. | source.ext.omidpn / .omidpv |
| App bundle | Google Play and Apple App Store only. Amazon and other stores not accepted. | app.bundle |
| Store URL | Read for quality / IQG. | app.storeurl |
| Blocklists | Honoured on response (advertiser domains, categories, bundles). | bcat / badv / bapp |
| Tag ID | Accepted as supplied; Adspin maps/normalises tagid internally per demand partner. | imp.tagid |
7. Bidding & Settlement
Adspin returns markup in the bid (bid.adm) or serves on the win notice, per §4.4. Settlement and impression counting follow the billing-notice model (§7.8).
| Behaviour | Adspin |
|---|---|
| Auction type | First Price (at = 1). |
| Win / loss notices | We use a billing notification: nurl OR burl, and always lurl for loss notices. |
| Impression counting | Counted on the billing notification (nurl/burl). In-app only; no adm pixel-based counting and no ADM render dependency. |
| Price macro | ${AUCTION_PRICE} accepted in plaintext — encryption not required. |
| Price verification | We accept the SSP-reported clearing price as-is for settlement; no strict re-verification of the returned ${AUCTION_PRICE}. |
| Markup delivery | bid.adm or win-notice return (§4.4.1–4.4.2). If both are present, adm takes precedence. |
Macros honoured per §4.5 where applicable, including ${AUCTION_ID}, ${AUCTION_IMP_ID}, ${AUCTION_PRICE}, and ${AUCTION_CURRENCY}. Use "AUDIT" as the macro value when rendering for QA.
8. Private Marketplace & Deals
Adspin supports PMP deals via the imp.pmp.deals object (§3.2.11–3.2.12).
| Behaviour | Adspin |
|---|---|
| Deal object | pmp.deals[] supported. |
| Deal ID type | Both String and Integer accepted for deal.id. |
| Private auction flag | pmp.private_auction read and honoured. |
| Deal reference on response | Returned via bid.dealid when bidding against a deal. |
9. Bid Request Field Reference
Summary of fields Adspin reads on inbound bid requests. Required follows oRTB minimums; Expected means Adspin relies on it for decisioning even though oRTB marks it optional.
| Object | Field | Use | Need |
|---|---|---|---|
| BidRequest | id | Auction ID | Required |
| BidRequest | at | Must be 1 (first price) | Expected |
| BidRequest | tmax | Timeout budget vs our 600 ms | Expected |
| BidRequest | cur | USD/EUR/GBP | Expected |
| Imp | id | Impression ID | Required |
| Imp | secure | Must be 1 | Expected |
| Imp | bidfloor/bidfloorcur | Floor in CPM | Expected |
| Imp | rwdd | Rewarded flag | Optional |
| Imp | exp | Impression expiry | Optional |
| Imp | banner/video | Format (one only) | Required |
| Imp | tagid | Placement (mapped internally) | Optional |
| Imp.ext | gpid | Global placement ID | Optional |
| App | bundle | Google Play / Apple only | Expected |
| App | storeurl | Quality / IQG | Expected |
| Device | ifa/lmt/dnt | Identity / compliance | Expected |
| Device | ua/make/model/os | Device targeting | Expected |
| Device | geo | Location targeting | Expected |
| User | ext.eids | UID2.0 / ID5 | Optional |
| User | consent/ext.consent | TCF v2.2 string | Expected (EU) |
| Regs | gdpr/us_privacy/coppa/gpp | Compliance flags | Expected |
| Source | ext.schain | Supply chain | Expected |
| Source | ext.omidpn/omidpv | Viewability | Optional |
| Pmp | deals[] | PMP deals | Optional |
10. Onboarding Checklist
To bring a new supply connection live with Adspin:
- 1Exchange contacts and technical points of contact shared on both sides.
- 2Endpoint URL, expected QPS, and data-centre/region routing confirmed by Adspin.
- 3Sample bid requests (banner + video + rewarded) shared for validation against this spec.
- 4Confirm
at=1,secure=1, gzip, andapp.bundlestore coverage (Google Play / Apple). - 5Confirm privacy signal population (
regs.gdpr, consent string,us_privacy/gpp). - 6Confirm schain completeness and seller IDs.
- 7Agree win/billing notification method (
nurl/burl) and loss notice (lurl). - 8Low-QPS test flight, reconcile impression counts and clearing prices.
- 9Ramp QPS to target; monitor timeout and discrepancy rates.
Ready to integrate?
Reach out to the Adspin partnerships team to get your endpoint and kick off step one.
Appendix A. Glossary
| Term | Meaning |
|---|---|
| DSP | Demand-side platform — the buyer (Adspin). |
| SSP / Exchange | Supply-side platform sending bid requests to Adspin. |
schain | Supply chain object identifying entities in the payment path (§3.2.25). |
nurl / burl / lurl | Win / billing / loss notice URLs (§4.3.3, §4.4). |
| GPID | Global Placement ID (imp.ext.gpid). |
eids | Extended identifiers, e.g. UID2.0, ID5 (user.ext.eids). |
| TCF | IAB Transparency & Consent Framework (GDPR). |
| rewarded | Ad that grants the user an in-app reward on completion. |
