Skip to main content

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

HeaderRequiredDescription
User-AgentIdentifies Vera. Format: Vera/{version} (Chromium/{version}; {platform})
X-Vera-TokenWhen logged inSigned JWT from the identity provider. Contains subscription status, PPR balance, consent scope. No name, no email address.
X-Vera-VerifyWhen availableNetwork verification signal. Proves network-layer identity (telecom carrier).
X-Vera-Client-VersionSemantic 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 presentPublisher responseUser experience
NoneStandard HTMLStandard web experience; no Vera-specific content served
User-Agent + X-Vera-Client-VersionVera template (no consent banners)Clean reading experience
User-Agent + token (active sub)Vera template + full accessFull article, no dialog
User-Agent + token (no sub)402 Payment RequiredNative Vera payment dialog