Monetization
This specification is at an early draft stage. Ideas are open for change and debate. A lot of the content was developed with the help of Claude AI.
Monetization
Wallet Integration
The wallet provider handles cross-publisher subscription management and pay-per-read for human Vera users. It runs as a privileged background service in the browser. Subscription status and wallet balance are cached locally (15-minute TTL).
Pay-per-Read Flow
# Vera browser (pseudocode)
async def handle_ppr_payment(article_id: str, price: float, publisher: str):
wallet = await wallet.get_wallet()
if wallet.balance < price:
show_topup_dialog(required=price, current=wallet.balance)
return
confirmed = await show_ppr_confirm_dialog(
publisher=publisher, price=price,
article_preview=current_page_title()
)
if confirmed:
tx = await wallet.debit(
amount=price, publisher=publisher, article_id=article_id
)
await sso.refresh_token(include_ppr_receipt=tx.receipt_id)
await browser.reload()
OpenRTB: Programmatic Advertising Integration
The ad-supported tier is not tied to a single ad network. Vera integrates with the programmatic advertising ecosystem via the OpenRTB 2.x standard, giving publishers full control over their demand stack.
When a Vera user visits an ad-supported page, the browser assembles an OpenRTB bid request and forwards it to the publisher's configured endpoint: an SSP, a DSP, or a self-hosted Prebid Server instance. Any OpenRTB-compliant auction endpoint works without modification.
The key difference from a standard browser: the bid request is assembled by the browser itself. Vera's central consent store (the same store used for the identity layer) supplies a TCF 2.x consent string that goes directly into user.ext.consent. The signal comes from a verified, one-time user action, not from page-level JavaScript.
Vera Browser
│
├─ Ad-supported page requested
├─ Reads consent store → TCF 2.x string
├─ Constructs OpenRTB BidRequest
│ regs.gdpr = 1
│ user.ext.consent = <TCF string>
│ imp[0].secure = 1
└─ POST → publisher's OpenRTB endpoint (SSP / DSP / Prebid Server)
Publishers declare their endpoint in the integration manifest:
{
"monetization": {
"ad_supported": {
"openrtb_endpoint": "https://prebid.publisher.news/openrtb2/auction",
"tmax_ms": 150,
"floor_price_cpm": 0.50
}
}
}
Access Decision Matrix (Human Traffic)
| Model | Token | Subscription | PPR balance | Result |
|---|---|---|---|---|
| Subscription | ✅ | ✅ | — | 200, full article |
| Subscription | ✅ | ❌ | — | 402, subscription dialog |
| PPR | ✅ | — | >= price | 200 after debit |
| PPR | ✅ | — | < price | 402, top-up dialog |
| Ad-supported | any | — | — | 200, ads via Ströer |
| Free | any | — | — | 200, no dialog |