Conversation
AGENT TESTINGPR #4684 Review: New Adapter: DPAIAuthor: driftpixelai | Type: Alias-Only (with userSync) | CI: Clean (all checks passed) Triage Manifest
Field-by-Field Verification Results1.
|
| Check | Result | Evidence |
|---|---|---|
| Parent exists | PASS | static/bidder-info/teqblaze.yaml exists on master |
| No alias chain | PASS | teqblaze has whiteLabelOnly: true but no aliasOf — it's a standalone white-label adapter |
| White-label compliance | PASS | teqblaze is explicitly whiteLabelOnly: true, so aliasing is the correct and intended approach |
| Endpoint domain differs from parent | PASS | Parent has no endpoint field; dpai defines its own (drift-pixel.ai) |
2. endpoint: "https://ssp.drift-pixel.ai/pserver"
| Check | Result | Evidence |
|---|---|---|
| URL format | PASS | Well-formed HTTPS URL |
| Reachability | PASS | HTTP 204 on POST, 0.48s response time |
| SSL/TLS | PASS | Valid Let's Encrypt cert (CN=ssp.drift-pixel.ai, issuer R13), expires May 11, 2026 |
| No hardcoded credentials | PASS | Clean URL, no secrets |
| No template macros | PASS | No {{...}} present |
| Domain ownership | PASS | drift-pixel.ai — plausible domain for "DPAI" (Drift Pixel AI) adapter by driftpixelai |
3. gvlVendorID (absent)
| Check | Result | Evidence |
|---|---|---|
| GVL ID present | INFO | No gvlVendorID declared. Parent teqblaze also has no GVL ID |
| Impact | INFO | Without a GVL ID, the adapter will not participate in TCF vendor consent checks. This is permitted but may limit EU traffic eligibility |
4. capabilities: site + app (banner, video, native)
| Check | Result | Evidence |
|---|---|---|
| Valid media types | PASS | All three (banner, video, native) are valid |
| At least one per platform | PASS | Both site and app have 3 media types each |
| Subset of parent | PASS | Identical to teqblaze capabilities (site + app, banner/video/native) |
| No DOOH | PASS | DOOH not declared (teqblaze doesn't support it either) |
5. maintainer.email: "adops@driftpixel.ai"
| Check | Result | Evidence |
|---|---|---|
| Email format | PASS | Valid format user@domain.tld |
| Domain consistency | PASS | driftpixel.ai matches the endpoint domain drift-pixel.ai (hyphenated variant, same brand) |
6. userSync.redirect
| Check | Result | Evidence |
|---|---|---|
| URL format | PASS | Well-formed HTTPS URL |
| URL reachability | PASS | HTTP 204, 5.47s response time (slow but reachable) |
| SSL/TLS | PASS | Valid Let's Encrypt cert (CN=sync.drift-pixel.ai, issuer R12), expires May 11, 2026 |
Macro: {{.GDPR}} |
PASS | Valid macro (defined in macros.UserSyncPrivacy) |
Macro: {{.GDPRConsent}} |
PASS | Valid macro |
Macro: {{.USPrivacy}} |
PASS | Valid macro |
Macro: {{.GPP}} |
PASS | Valid macro |
Macro: {{.GPPSID}} |
PASS | Valid macro |
Macro: {{.RedirectURL}} |
PASS | Valid macro (defined in config.SyncerEndpoint) |
userMacro: "[UID]" |
PASS | Standard UID replacement placeholder |
| Domain consistency | PASS | sync.drift-pixel.ai — same base domain as endpoint |
7. userSync.iframe
| Check | Result | Evidence |
|---|---|---|
| URL format | PASS | Well-formed HTTPS URL |
| URL reachability | PASS | HTTP 204, 5.35s response time (slow but reachable) |
| SSL/TLS | PASS | Same cert as redirect (CN=sync.drift-pixel.ai) |
Macro: {{.GDPR}} |
PASS | Valid macro |
Macro: {{.GDPRConsent}} |
PASS | Valid macro |
Macro: {{.USPrivacy}} |
PASS | Valid macro |
Macro: {{.GPP}} |
PASS | Valid macro |
Macro: {{.GPPSID}} |
PASS | Valid macro |
Macro: {{.RedirectURL}} |
PASS | Valid macro (param name pbserverUrl — cosmetic difference only, functionally correct) |
userMacro: "[UID]" |
PASS | Standard UID replacement placeholder |
| Path consistency | PASS | /pbserverIframe path distinguishes iframe from redirect (/pbserver) |
8. PR-Level Checks
| Check | Result | Evidence |
|---|---|---|
| Documentation PR | PASS | PR description links prebid/prebid.github.io#6427 |
| Duplicate PR check | PASS | No other open PRs for "dpai" |
| CI status | PASS | All 4 checks passed (validate-merge, validate 1.24.x, validate 1.23.x, notify) |
Observations
-
No
gvlVendorID— This is not a blocker (the parent teqblaze also has none), but it means the adapter won't participate in TCF vendor consent filtering. If Drift Pixel AI has a registered GVL vendor ID, adding it would be beneficial for EU traffic. -
Sync URL response times — Both redirect and iframe sync URLs respond in ~5.4s, which is notably slower than the main endpoint (0.48s). This is functional but slower than typical sync endpoints. Not a blocker.
-
Consistent branding — All domains (
ssp.drift-pixel.ai,sync.drift-pixel.ai, emaildriftpixel.ai) share the same brand identity, and SSL certs were freshly issued (Feb 10, 2026).
Recommendation: APPROVE
This is a clean alias-only adapter PR with userSync configuration. The "dpai" adapter correctly aliases the teqblaze white-label-only adapter with its own endpoint, userSync URLs (both redirect and iframe), and maintainer contact. All verification checks pass — endpoint is live with valid SSL, all 6 userSync template macros are valid Prebid Server macros, capabilities match the parent, sync URLs are reachable, and the docs PR is linked. The missing gvlVendorID is informational only (parent has none either).
Task Completion Summary
| Task # | Subject | Status |
|---|---|---|
| 1 | PR Triage: Classify PR type, route files, check CI | Completed |
| 2 | Verify dpai: aliasOf field |
Completed |
| 3 | Verify dpai: endpoint field |
Completed |
| 4 | Verify dpai: gvlVendorID (absent) |
Completed |
| 5 | Verify dpai: capabilities field |
Completed |
| 6 | Verify dpai: maintainer.email field |
Completed |
| 7 | Verify dpai: userSync.redirect field + macros |
Completed |
| 8 | Verify dpai: userSync.iframe field + macros |
Completed |
| 9 | PR-level: Documentation PR and duplicate check | Completed |
| 10 | Produce final review summary | Completed |
Skills Called
| Skill | Outcome |
|---|---|
pr-triage |
Executed manually inline following the SKILL.md workflow |
bidder-info-pr-review |
Executed manually inline following the SKILL.md workflow (field-level verification tasks) |
Code / Commands Executed
| Command | Purpose | Result |
|---|---|---|
curl -X POST https://ssp.drift-pixel.ai/pserver |
Endpoint reachability + SSL check | HTTP 204, SSL valid, 0.48s |
openssl s_client -connect ssp.drift-pixel.ai:443 |
SSL certificate details | Let's Encrypt R13, valid until May 11 2026 |
curl https://sync.drift-pixel.ai/pbserver?... |
Redirect sync URL reachability | HTTP 204, 5.47s |
curl https://sync.drift-pixel.ai/pbserverIframe?... |
Iframe sync URL reachability | HTTP 204, 5.35s |
openssl s_client -connect sync.drift-pixel.ai:443 |
Sync SSL certificate details | Let's Encrypt R12, valid until May 11 2026 |
WebFetch API Calls
| URL | Purpose |
|---|---|
api.github.com/.../pulls/4684 |
PR metadata (title, author, description) |
api.github.com/.../pulls/4684/files |
File list + patches |
api.github.com/.../commits/{sha}/check-runs |
CI status (all 4 passed) |
raw.githubusercontent.com/.../teqblaze.yaml |
Parent adapter YAML for alias validation |
api.github.com/search/issues?q=dpai |
Duplicate PR check |
raw.githubusercontent.com/.../usersync/syncer.go |
UserSync macro validation |
| @@ -0,0 +1,22 @@ | |||
| aliasOf: "teqblaze" | |||
| endpoint: "https://ssp.drift-pixel.ai/pserver" | |||
There was a problem hiding this comment.
Getting 404 when trying to hit endpoint.
`curl -s -w "\nHTTP_STATUS:%{http_code}\n" -X POST "https://ssp.drift-pixel.ai/pserver?placementId=aaaaaaaaaaaaaaaaaaaaaaaa" -H "Content-Type: application/json" -d "{"id":"1234","imp":[{"id":"imp1234"}]}"
HTTP_STATUS:404`
There was a problem hiding this comment.
Hello, @karwaankit32
The endpoint works correctly — it accepts placementId in the request body, not as a query parameter.
When hitting POST /pserver without query params, it returns 204 No Content as expected:
curl -i --location --request POST https://ssp.drift-pixel.ai/pserver
HTTP/1.1 204 No Content
Server: nginx
Date: Tue, 17 Feb 2026 08:48:43 GMT
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
The 404 you're getting is because ?placementId=... in the URL changes the routing. The correct way to test:
curl -s -w "\nHTTP_STATUS:%{http_code}\n" -X POST "https://ssp.drift-pixel.ai/pserver" -H "Content-Type: application/json" -d '{"id":"1234","imp":[{"id":"imp1234"}]}'
HTTP_STATUS:204
There was a problem hiding this comment.
Acknowledging I received 204 response. Thanks
| aliasOf: "teqblaze" | ||
| endpoint: "https://ssp.drift-pixel.ai/pserver" | ||
| maintainer: | ||
| email: "adops@driftpixel.ai" |
There was a problem hiding this comment.
Sent a mail to verify this mailbox. Please acknowledge over the mailbox with "recieved".
Thanks
There was a problem hiding this comment.
The response was sent on February 17
There was a problem hiding this comment.
Hello, I dont see the response over the mailbox
| @@ -0,0 +1,22 @@ | |||
| aliasOf: "teqblaze" | |||
| endpoint: "https://ssp.drift-pixel.ai/pserver" | |||
There was a problem hiding this comment.
Acknowledging I received 204 response. Thanks
| url: "https://sync.drift-pixel.ai/pbserver?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&redir={{.RedirectURL}}" | ||
| userMacro: "[UID]" | ||
| iframe: | ||
| url: "https://sync.drift-pixel.ai/pbserverIframe?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&pbserverUrl={{.RedirectURL}}" |
There was a problem hiding this comment.
Successfully verified iframe type of userSync.
| - banner | ||
| - video | ||
| - native | ||
| userSync: |
There was a problem hiding this comment.
Verifying that userSyncing works as expected
Type of change
Bugfix
Feature
New bidder adapter
Updated bidder adapter
Code style update (formatting, local variables)
Refactoring (no functional changes, no api changes)
Build related changes
CI related changes
Does this change affect user-facing APIs or examples documented on http://prebid.org?
Other
Description of change
Other information
doc MR: prebid/prebid.github.io#6427