Changelog.

Platform and protocol release history.

Partner Program

April 20, 2026

Affiliate Partner Portal — Three Tracks, Full Attribution

The P402 Partner Program is live. Three tracks — Developer Affiliate (20% recurring, 12 months), Agency (25% recurring, 12 months), and Enterprise (10% year-one with deal registration) — are managed through a dedicated partner portal at /partner. Partners get real-time commission tracking, referral link management, lead registration, and a full content library covering positioning, campaigns, compliance, and technical integration.

  • Partner portal: dashboard, commissions, conversions, leads, deals, payouts, links, settings — 9 pages with live data from 22 new DB tables
  • Attribution stack: deal registration wins over registered lead which wins over cookie last-touch; 90-day cookie window; multi-touch credit splitting across touchpoints
  • Commission lifecycle: pending → approved → in_payout → paid with 30-day hold on SaaS commissions, 60-day hold on Enterprise
  • Dynamic referral link builder at /partner/links — UTM parameters, vanity slugs, conversion-rate column, click history

24-Article Partner Docs

Every section of the partner lifecycle has a dedicated reference article at /partner/docs/[slug]. Articles are written for the partner audience — not internal docs, not marketing copy. Technical partners get real code; agency partners get full campaign templates with production-ready copy.

  • Positioning (4) — P402 in one sentence, ideal customer profile, approved claims, prohibited language
  • Product (4) — How x402 works, why AP2 mandates matter, Bazaar distribution model, Router vs. direct API
  • Campaigns (4) — Newsletter templates (3 full editions), X/Twitter threads (4 complete threads), YouTube descriptions, email sequences
  • Compliance (4) — FTC/ASA disclosure guide, brand guidelines, prohibited methods, brand bidding policy
  • Technical (4) — SDK quickstart with code, x402 code walkthrough, building a paid agent, MCP integration guide
  • Payouts (4) — Commission calculation, hold period rules, tax form requirements, payout timeline

Admin Partner Management & Attribution API

Partner operations are managed from a new section of the admin console. Commission approval, payout batch processing, deal registration review, and fraud flags are all accessible without touching the database directly.

  • Attribution tracking endpoint: GET /api/partner/track — records clicks, resolves partner from slug, sets 90-day cookie, redirects to destination
  • Referral conversion API: POST /api/partner/conversions — called on checkout completion, applies attribution precedence, auto-queues commission at the correct rate for the partner's track and tier
  • Migration: v2_016_partner_core.sql + v2_017_partner_attribution.sql — 22 tables including partner profiles, links, commissions, payouts, deal registrations, content assets, and attribution events
  • Footer updated with Partners column: Partner Program, Apply, Dashboard, Docs, Assets

Diataxis Documentation System

April 16, 2026

12 Live Documentation Pages — Four-Quadrant IA

The P402 documentation system is rebuilt from scratch using the Diataxis framework: four distinct modes — Tutorials (learning), How-To Guides (task completion), Reference (lookup), and Explanation (understanding). All placeholder pages replaced with production-quality content. 25 Playwright smoke tests green across all three doc categories.

  • Tutorials/docs/guides/budget-agent: five-step Python/TypeScript guide; agent submits task, P402 routes, settles in USDC, checks balance
  • How-To (7) — MCP server setup (Claude Desktop, Cursor, SSE host), session lifecycle, USDC funding with EIP-3009 deposit + bridge options, routing mode decision guide, semantic cache enable/disable/monitor, API key create/rotate/revoke
  • Reference (3) — full CLI command reference, Billing Guard 6-layer protection with every error code, complete error code table with retry guidance
  • Explanation (2) — system architecture (routing engine, cache, x402, intelligence, ERC-8004), security model (EIP-3009, replay protection, gas limits, key hashing, threat model)

Agent Quickstart & /docs Landing

The /docs landing page is redesigned as a four-quadrant navigation hub. A dedicated agent quickstart guide covers the A2A protocol from first principles — AgentCard, task lifecycle, x402 extension, and mandate-gated sessions — with complete code examples for both sending and receiving agents.

  • All “coming soon” links activated — no dead ends in the docs navigation
  • Consistent component system: SectionLabel, Callout (lime/neutral/warn variants), CodeBlock, TableBlock across all 12 pages
  • SEO: each page has canonical URL, OpenGraph metadata, and structured breadcrumb

E2E Test Suite & Traffic Instrumentation

April 7, 2026

65 Playwright Tests — Full Golden Path Coverage

A complete Playwright E2E suite ships covering the core product surfaces. 65 tests pass across smoke, functional, resilience, PLG funnel, and wallet billing scenarios. Web3 wallet interactions are mocked via page.addInitScript() — no browser extension required in CI.

  • smoke.spec.ts — public page load, nav, health endpoint, footer links
  • functional.spec.ts — routing playground, provider comparison, session create
  • error-resilience.spec.ts — provider failover, API error surfaces, SSE reconnect
  • audit-plg-funnel.spec.ts — SSE trace stream mocked via route.fulfill()
  • wallet-billing.spec.ts — EIP-2612 permit flow mocked via eth_signTypedData_v4 override

traffic_events Instrumentation

Every routed request now writes a structured event to the traffic_events table — including provider selected, routing mode, latency, cost, cache hit status, and settlement outcome. This powers the Requests and Savings dashboard pages with real per-request data rather than aggregates.

  • Write path is non-blocking — event insert never delays the API response
  • .env.test.local auto-loaded in Playwright config — test DB URL isolated from production Neon instance
  • Edge middleware re-written to remove node:crypto dependency — compatible with Vercel Edge Runtime

Admin Console

March 31, 2026

RBAC Admin Dashboard — 10 Pages, 5 Roles

A dedicated admin console at /admin replaces ad-hoc database access for platform operations. Separate auth stack from the user-facing product — DB sessions, scrypt password hashing, AES-256-GCM TOTP — with middleware IP allowlist enforcement.

  • 5 roles: super_admin, ops_admin, analytics, safety, finance — each with scoped read/write permissions per page
  • 10 pages: Overview (KPI command center), Users, Analytics, Health, Safety, Intelligence, Bazaar, Admins, Audit Log, System
  • Overview: KPI cards with sparklines, revenue and request growth chart (colorblind-safe, zero-baseline, tooltips), provider health pulse, recent anomaly feed
  • DB: migration v2_035_admin_system.sql — admin_users, admin_sessions, admin_audit_log, permissions; bootstrap script seeds the first super_admin

Audit Log & Safety Console

Every admin action is written to admin_audit_log with before/after JSONB diff. The Safety page exposes quarantined sessions, flagged agents, and anomaly alerts with inline approve/escalate/dismiss controls. The Intelligence page mirrors the Gemini economist and sentinel outputs for ops review.

  • Audit log: filterable by admin, action type, and target entity; JSONB diff viewer shows exactly what changed
  • Admin component library: DataTable, RoleBadge, HealthPulse, StatusBadge, GrowthChart, AdminButton — shared across all 10 pages
  • Login page redesigned in Neo-Brutalist system — no white-on-white input text

Sessions, Policy Visibility & Memory

March 27, 2026

8 New Intelligence Layer Surfaces

The Intelligence Layer dashboard expands with session management, trace policy inspection, and memory visibility. Every surface that was previously opaque — why a request was denied, whether the cache served it, what knowledge sources were used — is now inspectable without leaving the dashboard.

  • Sessions page — budget utilization bars, lifecycle status (active / expired / ended), expandable policy and wallet detail, end-session CTA, AP2 mandate linkage, deep-links to Requests + Traces per session
  • Policy Checks panel (trace detail) — derives from verify/settle node outcomes + policy-error strings; per-check pass/fail with denial detail for denied requests
  • Context & Memory panel (trace detail) — semantic cache hit callout (LLM skipped, cost $0.00), knowledge retrieval nodes with source name, latency, and status
  • Route Decision block (trace detail) — winner selection reason, rejected alternatives with scores, dry-run preview via POST /api/v1/execute/preview

Requests & Evals UX Improvements

Targeted UX hardening across the execution log and eval surfaces. Baseline updated from GPT-4o to claude-sonnet-4-6 ($0.000003/token) across savings calculations, the hero card, and the daily bar chart.

  • Requests table: keyboard navigation — ↑↓ select row, open trace, R refresh; double-click to trace; copyable curl in empty state
  • Evals: failed eval re-run CTA with pre-populated task URL; Knowledge page source-type grid empty state
  • AppSidebar: Sessions entry added (Layers icon); flex overflow scroll bug fixed
  • POST /api/v1/execute/preview — dry-run provider scoring endpoint, returns ranked providers and scores without making an LLM call

Intelligence Layer Dashboard

March 26, 2026

Execution Intelligence — 6 New Dashboard Surfaces

The Intelligence Layer now has a full dashboard presence. Every request P402 routes, every trace it records, every dollar it saves, and every quality score it evaluates is now visible, navigable, and actionable — without leaving the dashboard.

  • Requests — paginated execution log with status, routing mode, actual cost, savings vs claude-sonnet-4-6 baseline, and one-click trace navigation; keyboard shortcuts: ↑↓ to select rows, to open trace, R to refresh
  • Traces — per-request execution graph showing every node (model, tool, retrieval, verify, settle, cache) with latency, cost, provider, and evaluation scores; task text and savings % shown in a hero block at the top
  • Savings — period analytics (7d / 30d / 90d) with a hero card showing total saved and % below claude-sonnet-4-6 baseline; daily bar chart, breakdown by routing mode, provider spend distribution
  • Evals — response quality evaluation log from verify nodes; per-eval scores for relevance, completeness, groundedness, and coherence; failed evals surface a direct fix path with a “Re-run with Planned” action
  • Knowledge — RAG source registry (URL, file, API, plain text) with trust levels, chunk counts, and add/remove controls; used by retrieve nodes in planned executions
  • Tools — registered tool catalog showing built-in and custom tools, parameter schemas, and execution history

Mission Control: Intelligence Summary

The main dashboard now shows a live Intelligence Layer summary: total requests this week, total dollars saved (with % vs baseline), and eval pass rate — each linking directly to its drill-down page. Data refreshes automatically every 30–60 seconds.

  • Powered by three new REST endpoints: GET /api/v1/requests, GET /api/v1/savings?period=7d, GET /api/v1/evals — each with pagination, filters, and aggregate stats
  • Savings computed server-side: baseline estimated from claude-sonnet-4-6 reference rate ($3/1M tokens) applied to task token count; actual cost vs baseline delta stored on execute_requests.baseline_cost at write time
  • DB: migration v2_034 adds baseline_cost to execute_requests and provider_id / model_id to execute_trace_nodes

Trace Enrichment — Single-Query JOIN

getTrace() now returns full enrichment in a single round trip: plan node labels, tool execution I/O, evaluation scores, and originating task text are all resolved server-side. No N+1 queries at the API layer.

  • Three LEFT JOINs added: execute_plan_nodes (label), tool_executions (I/O, latency, error), execute_evaluations (scores, pass/fail)
  • Trace detail page shows task text, cost savings %, provider, and model in a context hero block — the first thing visible before any node detail
  • Adaptive cost formatting: formatCost() renders 2 decimals ≥ $1, 4 decimals ≥ $0.01, 6 decimals below — no trailing noise at any scale

Escrow Toggle & A2A Idempotency

Two targeted hardening changes ship alongside the Intelligence Layer.

  • Escrow toggle in Settings — per-tenant control over auto-escrow on Bazaar tasks; when disabled, all tasks use direct x402 settlement at the plan-rate fee (no 2% escrow fee); migration v2_024 adds escrow_enabled to tenant_settings (default: TRUE — existing behavior preserved)
  • A2A idempotency keys — clients can now set an Idempotency-Key header on tasks/send requests; duplicate submissions within the same tenant return the original task rather than creating a second; constraint is scoped per (tenant_id, idempotency_key) with a partial unique index that excludes NULLs — backwards compatible

P402Escrow — Conditional Settlement on Base

March 23, 2026

P402Escrow.sol — Live on Base Mainnet

Conditional USDC escrow contract deployed to Base mainnet at 0x4596c0e69d08e4ca6f02c7a129fc2bff8a6905ac. Funds lock on-chain at job creation and release only when the payer confirms delivery — or P402 resolves a dispute. Protocol fee: 1% to treasury on settlement. Dispute window: 48 hours after provider marks delivery.

  • State machine: CREATED → FUNDED → ACCEPTED → IN_PROGRESS → DELIVERED → SETTLED — with DISPUTED → RESOLVED and EXPIRED / CANCELLED exit paths
  • REST API: POST /api/v2/escrow (create), GET /api/v2/escrow/[id] (detail + event log), POST /api/v2/escrow/[id] (transition: fund | accept | start | deliver | release | dispute)
  • DB: escrows and escrow_events tables via migration v2_020_escrow.sql; evidence bundle endpoint at GET /api/v1/analytics/evidence-bundle/[escrow_id]

Bazaar Auto-Escrow — Phase 3.2

Any A2A task submitted via the Bazaar with price_usd ≥ $1.00 and a provider_address automatically creates an escrow — no extra API calls required. The escrow_id is returned in task metadata and stored in task configuration JSONB. Escrow creation is non-blocking — task proceeds even if escrow fails.

  • Dashboard: Bazaar SETTLE button now routes to escrow creation (≥$1 + provider wallet) or direct EIP-3009 settlement (<$1)
  • My Escrows panel in /dashboard/bazaar — live state with action buttons (Fund → Accept → Start → Deliver → Release / Dispute)
  • bazaar_resources.provider_wallet_address added — populated from payTo in x402 manifests during ingest; powers escrow recipient resolution
  • New useEscrow hook — polls /api/v2/escrow, exposes createEscrow() and transition()

Platform & Docs

Escrow surfaced across the full product surface. Models page now falls back to local registry (13 providers, all with live pricing) when OpenRouter is unavailable, eliminating the “Error loading live prices” state entirely.

  • New /docs/escrow — state machine table, quick start code, full API reference, dispute window details
  • New /product/escrow — Lock / Deliver / Release overview with agent commerce, creative work, and API access use cases
  • Landing page updated to six capabilities: Routing, Payments, Escrow, Controls, Orchestration, Ecosystem
  • GET /api/v2/models falls back to getProviderRegistry().getAllModels() on OpenRouter failure — models page always renders

World ID, Credits & Model Catalog

March 22, 2026

Human-Anchored Credits — World ID Free Trial

World ID verification now unlocks 500 free credits ($5.00) on the first verified request. Credits are a first-class billing primitive — 1 credit equals $0.01 USD, consumed atomically via UPDATE ... WHERE balance >= amount — no overdraft is possible. When credits are exhausted, sessions fall through to standard USDC billing with no disruption.

  • p402_metadata extended: human_verified, human_usage_remaining, reputation_score, credits_spent, credits_balance — returned on every POST /api/v2/chat/completions response
  • New credit API surface: GET /api/v2/credits/balance, POST /api/v2/credits/purchase (mode: 'test' | 'paid'), GET /api/v2/credits/history
  • CLI: p402 credits balance and p402 credits buy <amount_usd>
  • MCP: new p402_agent_status tool — checks AgentBook registration and returns live credits_remaining for any wallet address

World Mini App — world.p402.io

A standalone Next.js 15 mini app purpose-built for the World App ecosystem. Deployed separately from the Base Mini App at world.p402.io — different SDK, different store, same P402 backend linked via human_id_hash.

  • Auth via MiniKit.commandsAsync.walletAuth — SIWE-style session, returns scoped HMAC bearer token tied to the World wallet address
  • Credit purchases via MiniKit.commandsAsync.pay() — four tiers ($5 / $10 / $50 / $100 USDC); World App handles the transaction, P402 credits the balance on confirmation
  • 4 tabs: Chat (streaming, cost display), Agents (A2A registry browser), Credits (balance + history), Settings (routing mode, identity, reputation)
  • Session endpoint at POST /api/v1/world-mini/session — derives tenant from wallet address, auto-grants free trial credit for newly verified humans

Base Mini App — World ID Integration

The existing Farcaster mini app at mini.p402.io is updated to surface World ID verification state and credit balance inline — no new screens, state flows in from p402_metadata on every chat response.

  • Header: [VERIFIED] badge appears when humanVerified is true — shows free-uses remaining or credit count
  • Chat input: tri-state indicator — free trial active (lime), credit balance available (neutral), low USDC funds warning (amber) — each mutually exclusive
  • Settings modal: World ID section with deep link to worldapp://verify for unverified users; verified state shows FREE USES / CREDITS / REP SCORE grid
  • Agents panel: inline VERIFIED trust badge on agents where human_verified: true

Model Catalog — /models

Live model comparison page added to the main nav. Pulls from GET /api/v2/models which is now backed by an hourly cron sync from OpenRouter into a model_prices table — pricing is current within 1 hour of provider changes.

  • 300+ models filterable by provider and capability; sortable by input cost, context window, or name
  • Cost calculator: input token count × output token count × daily requests → direct API cost vs P402 (22% blended savings via caching and routing)
  • DB: model_prices table with model_price_history for trend tracking; Redis cache key p402:models:openrouter (TTL 1hr)
  • Sync cron at POST /api/internal/cron/models/sync — marks models dropped by OpenRouter as is_active = FALSE rather than deleting them

VS Code Extension

March 18, 2026

p402-protocol.p402 — Embedded MCP Server in VS Code

The P402 VS Code extension ships an embedded MCP server registered via McpServerDefinitionProvider. Installing the extension is the entire setup — no mcp.json editing, no manual server start. VS Code spawns dist/mcp-server.mjs as a child process when Copilot agent mode needs it, and all 6 P402 tools appear immediately.

  • Install: Extensions panel → search P402 — or ext install p402-protocol.p402
  • Published simultaneously to VS Code Marketplace and Open VSX (Eclipse Theia, Gitpod, VSCodium)
  • The MCP server binary is bundled into the extension at build time via esbuild — no npm fetch at runtime, no Node version dependency
  • Requires only P402_API_KEY set via the P402: Configure API Key command

Extension Surface

  • Status bar — shows current router mode (⚡ P402: balanced); click to switch modes via quick-pick
  • Activity bar + sidebar — three tree views: Sessions (budget remaining, spend, request count), Recent requests (model, cost, latency), Provider status (healthy / degraded / down per provider)
  • Command paletteP402: Configure API Key, P402: Switch Router Mode, P402: Create Budget Session, P402: Open Dashboard
  • Settings UIp402.apiKey, p402.routerMode, p402.showStatusBar

Distribution

  • VS Code Marketplace: marketplace.visualstudio.com/items?itemName=p402-protocol.p402
  • Open VSX: open-vsx.org/extension/p402-protocol/p402
  • Source: packages/vscode/ in the monorepo; CI publishes to both registries on vscode/v* tags
  • VS Code's @mcp gallery search also surfaces P402 via the MCP Registry listing (io.github.Z333Q/p402) — the extension and registry listing are complementary, not redundant

MCP Server

March 17, 2026

@p402/mcp-server — P402 as an MCP Tool Server

P402 routing and x402 settlement are now accessible via the Model Context Protocol stdio transport. Agent runtimes that speak MCP — Claude Desktop, Cursor, Windsurf, or any custom host — can route LLM requests across 300+ models and settle per-call in USDC on Base without implementing an HTTP client, managing wallet signing, or handling provider credentials directly.

  • Spawned as a stdio subprocess — no open ports, no daemon process required
  • Requires only P402_API_KEY — no wallet private key at the MCP layer
  • All routing logic, billing guard enforcement, and on-chain settlement run on the P402 backend unchanged; the MCP layer is a thin adapter over POST /api/v2/chat/completions and POST /api/v2/sessions
  • Budget enforcement is identical to the REST API — a session with a $5.00 cap cannot be exceeded regardless of tool call volume

6 Tools

  • p402_chat — routes a prompt to the optimal provider by mode (cost / quality / speed / balanced); settles payment atomically if a session token is supplied; returns completion, provider used, cost in USD, and latency
  • p402_create_session — creates a budget session with a hard USD cap; returns a session_token scoped to that budget
  • p402_get_session — returns balance_remaining, amount_spent_usd, request_count, and status
  • p402_list_models — enumerates all routable models with provider, context window, and per-token pricing; filterable by provider
  • p402_compare_providers — returns all providers serving a given model with cost and p95 latency side-by-side
  • p402_health — router uptime, facilitator settlement status, and active provider count

Distribution

  • Published to npm as @p402/mcp-server — zero-install via npx -y @p402/mcp-server
  • Listed on the official MCP Registry as io.github.Z333Q/p402 at registry.modelcontextprotocol.io
  • Indexed in community directories: punkpeye/awesome-mcp-servers (Finance & Fintech), wong2/awesome-mcp-servers, mcp.so, mcpindex.net, mcpserverfinder.com
  • Source in monorepo at packages/mcp-server/ — TypeScript, @modelcontextprotocol/sdk

Progressive Authorization

March 6, 2026

4-State Authorization Model

P402 now formalizes authorization as a progression: Visitor → Identity Only → Wallet Linked → Payment Ready. Each state is computed server-side at GET /api/v2/auth/state and surfaced throughout the product with a clear, low-friction path to the next state.

  • State is derived from the NextAuth session: CDP email users resolve to wallet_linked immediately; Google OAuth users are resolved against the account's linked wallet address
  • Dashboard banner renders contextually per state — amber for unactivated payments, dark for unfunded wallet, silent when payment-ready
  • Nav wallet indicator distinguishes Google-only sessions ("Activate Payments") from wallet-linked sessions (address chip) without triggering RainbowKit
  • Mobile nav no longer surfaces a wallet connect prompt for unauthenticated visitors

Google OAuth → Wallet Activation Path

Google OAuth users encounter a dedicated wallet activation pre-step in onboarding. The CDP email field is pre-filled from the Google session. The step is skippable; deferred state is tracked in localStorage and surfaces an inline activation prompt on the dashboard. Users who skip remain in identity_only state — dashboard and API key access is unaffected; payment routes return a 402 until a wallet is linked.

Builder Onboarding Path

Developers who select the Build & Route role now receive targeted onboarding copy: no personal wallet required, agent sessions use CDP server wallets funded by clients, with a direct reference to the POST /api/v2/sessions endpoint and wallet_source: "cdp" parameter.

CDP Wallet Integration

March 4, 2026

Email OTP — Embedded Wallet on First Login

Sign in with an email address. A self-custody Base wallet is provisioned automatically via Coinbase Developer Platform (CDP) Embedded Wallet — no browser extension, no seed phrase, no prior crypto experience required.

  • OTP delivery and wallet creation complete in under 500 ms end-to-end
  • Private keys are generated and stored inside Coinbase's AWS Nitro Enclave (TEE) — never transmitted to the P402 server
  • Session identity: wallet address is the primary identity token, no separate linking step
  • First login presents a wallet acknowledgment screen with address and network confirmation

CDP Server Wallet for Facilitator Signing

The x402 facilitator signing wallet supports two modes, selectable via environment variable:

  • Mode A — CDP TEE (CDP_SERVER_WALLET_ENABLED=true): private key never touches the Node.js process; signing happens inside Coinbase's Nitro Enclave. Recommended for production.
  • Mode B — raw key: legacy local-dev fallback using P402_FACILITATOR_PRIVATE_KEY
  • Active mode is exposed at GET /api/v1/facilitator/health"mode": "cdp-server-wallet" | "raw-key"

Guided Wallet Funding — Onboarding Step 3

Onboarding is now 4 steps: Role → API Key → Fund Wallet → Orientation.

  • Fund Wallet step displays the connected wallet address with a one-click copy button
  • Instructions: copy address → send USDC on Base → the dashboard detects the deposit and transitions state automatically
  • Minimum deposit: $0.01 USDC. Contract: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

Protocol, SDK & CLI Launch

March 2, 2026

P402 Protocol — Open Source

The core P402 protocol specification and reference implementations are open source. Includes the x402 payment extension schema, AP2 mandate format, A2A JSON-RPC method definitions, and the ERC-8004 agent identity registry interface.

github.com/z333q/p402-protocol ↗

Developer SDK

@p402/sdk provides typed wrappers for routing requests, issuing AP2 mandates, verifying x402 payment payloads, and interacting with the A2A task API. TypeScript-first; ships ESM and CJS.

CLI

Manage facilitators, inspect routing decisions, check wallet balances, and tail live traffic from the terminal. Wraps the same REST endpoints exposed by the dashboard — no separate auth flow required; uses your existing API key.

Infrastructure & Platform

Feb 24 – Mar 2, 2026

P402 Claude Skill

  • Claude skill released covering routing modes, billing guard limits, session lifecycle, x402 payment settlement, A2A protocol, and provider cost comparison
  • Skill surfaced in footer, landing CTAs, and mobile navigation
  • Trained on Feb 2026 models; includes concrete migration examples from direct OpenAI/Anthropic API calls

Base Mainnet Smart Contracts

  • P402Settlement deployed at 0xd03c7ab9a84d86dbc171367168317d6ebe408601 — marketplace settlement with 1% protocol fee
  • SubscriptionFacilitator deployed at 0xc64747651e977464af5bce98895ca6018a3e26d7 — EIP-2612 recurring billing, gasless for subscribers after month 1
  • Treasury: 0xFa772434DCe6ED78831EbC9eeAcbDF42E2A031a6

Stripe & Billing Hardening

  • Webhook handler uses req.text() before signature verification — required by Next.js 15 to prevent body pre-parsing from breaking HMAC validation
  • All billing events use INSERT ... ON CONFLICT — idempotent against transient duplicate webhook delivery
  • Environment validation enforced at startup; missing required keys abort boot rather than surface at runtime
  • E2E billing suite green across Node 18 and 20