Skip to content

Comments

New adapter: DPAI#4684

Open
driftpixelai wants to merge 1 commit intoprebid:masterfrom
driftpixelai:master
Open

New adapter: DPAI#4684
driftpixelai wants to merge 1 commit intoprebid:masterfrom
driftpixelai:master

Conversation

@driftpixelai
Copy link
Contributor

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

@ChrisHuie
Copy link
Contributor

AGENT TESTING

PR #4684 Review: New Adapter: DPAI

Author: driftpixelai | Type: Alias-Only (with userSync) | CI: Clean (all checks passed)

Triage Manifest

Field Value
PR Type alias-only
Files 1 file: static/bidder-info/dpai.yaml [added]
Bidder affected dpai (alias of teqblaze)
Skills activated bidder-info-pr-review only
Cross-skill concerns None detected
Drift checks userSync macros validated against usersync/syncer.go

Field-by-Field Verification Results

1. aliasOf: "teqblaze"

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

  1. 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.

  2. 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.

  3. Consistent branding — All domains (ssp.drift-pixel.ai, sync.drift-pixel.ai, email driftpixel.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"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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`

Copy link
Contributor Author

@driftpixelai driftpixelai Feb 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledging I received 204 response. Thanks

aliasOf: "teqblaze"
endpoint: "https://ssp.drift-pixel.ai/pserver"
maintainer:
email: "adops@driftpixel.ai"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sent a mail to verify this mailbox. Please acknowledge over the mailbox with "recieved".
Thanks

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The response was sent on February 17

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello, I dont see the response over the mailbox

@bsardo bsardo added the adapter label Feb 17, 2026
@@ -0,0 +1,22 @@
aliasOf: "teqblaze"
endpoint: "https://ssp.drift-pixel.ai/pserver"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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}}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully verified iframe type of userSync.

- banner
- video
- native
userSync:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verifying that userSyncing works as expected

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants