Vera Request Protocol (VRP)
Early Draft
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.
Vera Request Protocol (VRP)
Overview
The Vera Request Protocol defines the HTTP headers the Vera browser sends with every request, and how publishers can respond to them. It builds entirely on standard HTTP, no proprietary protocol, no new infrastructure.
Request Headers
GET /article/federal-election-analysis HTTP/1.1
Host: some-publisher.news
User-Agent: Vera/1.0 (Chromium/124; Linux x86_64)
X-Vera-Token: eyJhbGciOiJFUzI1NiJ9...
X-Vera-Verify: vv_live_9f3a2b4c8d1e...
X-Vera-Client-Version: 1.2.4
Accept: text/html, application/json
Header Reference
| Header | Required | Description |
|---|---|---|
User-Agent | ✅ | Identifies Vera. Format: Vera/{version} (Chromium/{version}; {platform}) |
X-Vera-Token | When logged in | Signed JWT from the identity provider. Contains subscription status, PPR balance, consent scope. No name, no email address. |
X-Vera-Verify | When available | Network verification signal. Proves network-layer identity (telecom carrier). |
X-Vera-Client-Version | ✅ | Semantic version of the Vera browser. For publisher-side feature detection. |
User-Agent Format
Vera/1.0 (Chromium/124; Linux x86_64)
Vera/1.2 (Chromium/126; Windows NT 10.0)
Vera/1.0 (Chromium/124; iPhone; CPU iOS 17)
Parsing helper:
def is_vera_browser(user_agent: str) -> bool:
return user_agent.startswith("Vera/")
def get_vera_version(user_agent: str) -> str | None:
if not is_vera_browser(user_agent):
return None
return user_agent.split("/")[1].split(" ")[0]
Publisher Response Options
| Vera headers present | Publisher response | User experience |
|---|---|---|
| None | Standard HTML | Standard web experience; no Vera-specific content served |
User-Agent + X-Vera-Client-Version | Vera template (no consent banners) | Clean reading experience |
| User-Agent + token (active sub) | Vera template + full access | Full article, no dialog |
| User-Agent + token (no sub) | 402 Payment Required | Native Vera payment dialog |