SuVerse payment funnel — measured numbers

Generated 2026-09-07 ~05:20 UTC, read-only pull from production databases and journald. M = measured (counted from a DB table or a log). E = estimated / inferred. All money in USDC, atomic units divided by 1e6, not rounded.

0. Windows and data availability

WindowBounds (UTC)
14 days2026-08-24 05:00:00 → 2026-09-07 05:00:00
24 hours2026-09-06 05:00:00 → 2026-09-07 05:00:00
SourceCoversAvailable fromWindow fully covered?
suverse_pay.proxy_request_logsproxy.suverse.io: every request to a paid endpoint (554 active), one row per request with outcome challenge / settled / settle_failed / upstream_error / invalid_config, hashed IP, User-Agent2026-05-31yes
suverse_pay.facilitator_paymentsevery verify+settle our facilitator executed (data endpoints, swap quote, QA bots); payer wallet, amount, tx2026-05-31yes
govhub.requestsapi.suverse.io GovHub (/v1/gov, /v1/freight, /v1/agent): one row per request, status, wallet, cost, raw IP, UA2026-05-22yes
journald: suverse-pay-proxy, suverse-pay-api, govhub.servicerequest/response lines (method, path, status, client IP), facilitator verify/settle calls, x402 verify verdicts2026-08-12 17:15 UTCyes
nginx access logsnot readable by this user (root/adm only)NOT used
Two separate surfaces are reported: A = proxy.suverse.io (suverse-pay proxy, 554 active paid endpoints under /v1/data and /v1/proxy, plus the $0.001 swap quote) and B = api.suverse.io GovHub (128 gov + 9 freight x402 endpoints, plus the prepaid /v1/agent logistics API). They have different logs and are not double-counted.

1. Funnel

A. proxy.suverse.io

Step14 days24 hoursHow measured
402 challenges issuedM 725,726M 39,547rows outcome=challenge. Cross-check from proxy journald: 741,942 HTTP 402 responses in 14d (377,158 POST / 362,888 GET / 1,896 HEAD); the 16,216 gap (2.2%) is 402s on paths that are not row-logged (swap quote, unknown slug). Use 725,726.
Requests that carried a payment header (= verify attempt)M 122M 8settled + settle_failed rows. 2 of the 122 (1 of the 8) were deliberately malformed headers from x402lint and never reached the facilitator; 120 real facilitator /verify calls.
Verify OK → settle OK (real on-chain settles)M 29M 2rows outcome=settled, each joined to a facilitator_payments row with tx hash
Verify rejected by our facilitator (HTTP 502)M 91M 5settle_failed / facilitator_error. 83 of 91 are ONE caller (see §2, "broken payer"). 8 = mercator-gateway/0.2 on two endpoints (08-26).
Conversion challenge → payment header0.0168%0.0202%122 / 725,726 ; 8 / 39,547
Conversion challenge → settled0.0040%0.0051%29 / 725,726 ; 2 / 39,547
Conversion payment header → settled23.8%25.0%29 / 122 ; 2 / 8. Excluding the single broken caller and the lint probe: 29 / 37 = 78.4%
Facilitator-side cross-check (suverse-pay-api journald, 14d): /facilitator/verify → 200: 154, → 502: 891 (= 297 failed verify sessions × 3 retries); /facilitator/settle → 200: 153. Every one of these calls came from our own proxy (185.218.126.38); nobody external uses facilitator.suverse.io directly. The failed sessions (296 HTTP 502 responses from the proxy, 297 "verify exhausted" log lines) split exactly: 205 from our own AgentOS QA host 5.189.190.163 (105 /v1/swap/base/quote, 93 /v1/swap/solana/execute, 7 /v1/swap/base/execute), 83 the broken external payer below, 8 mercator-gateway/0.2 (IPv6 2a06:98c0:3600::103). 153 settles = 29 proxy data + 6 external swap quote + 118 internal QA swap quote.

B. api.suverse.io GovHub

Step14 days24 hoursHow measured
402 challenges issuedM 20,888M 817requests.status_code=402 (journald cross-check: 20,895 POST 402)
Requests carrying a payment headerM 0M 0govhub journald has zero "x402 verify ok / verify rejected / malformed payment header" events in 14d; requests table has zero rows with wallet_address or tx_hash
SettledM 0M 0cost_paid_usdc_micro > 0: none. All-time GovHub has never had a paid x402 call from a non-internal wallet (only 0x0993…, 0x3869…, 8Hy7… = our wallets; last one 2026-07-18).
GovHub prepaid channel (broker balance, not x402), 14d: debits $4.300 (89 calls, 2026-08-24 19:12–19:40 UTC) by pingpointsdk+sandbox@… and $0.040 by pingpointsdk@…; 0 card/crypto top-ups in window (last card top-up 2026-08-21); 1 promo credit $10.00 on 09-03 (not cash). This is partner sandbox consumption, not new external revenue.

Combined

14 days24 hours
402 challenges (A+B)M 746,614M 40,364
Payment-header attempts (A+B)M 122M 8
Settled on data endpoints (A+B)M 29M 2
Settled swap-quote, external (A, not in the challenge count)M 6M 1

2. Who is the traffic

A. proxy.suverse.io, 14 days

Metric14 days24 hours
Distinct callers (hashed client IP)M 1,468M 169
Distinct User-Agent stringsM 228M 92
Callers that sent a payment headerM 22M 4
Callers that settledM 20M 2
Distinct external paying wallets (data endpoints + swap quote)M 15 (14 data + 1 swap-only)M 2
Our own QA wallets that paid (excluded from revenue)M 2 (GEyt… Solana 111 settles, 0x0145… Base 7 settles; swap quote only)M 1 (8 settles)

Non-paying traffic (challenges from callers that never sent a payment header on any endpoint, ever)

Class (by User-Agent)Challenges 14d% of all 402CallersUA strings…of which sent a request body
Self-declared monitor / indexer / prober / crawler (UA contains monitor, probe, indexer, crawler, health, census, observer, scout, discovery, liveness, explorer, bot, x402…)M 597,49382.3%1,17512017,566 (36 callers)
Generic client UA (node, axios, Java-http-client, python-*, curl, Deno, Go-http-client…)M 50,3426.9%13040213 (11 callers)
Browser UA (Mozilla/…)M 2,0210.3%1462934 (1 caller)
No UAM 1610.02%410
Total never-attemptedM 650,01789.6%1,433190
Method split from proxy journald (14d, all 402s): GET 362,888 + HEAD 1,896 = 364,784 body-less discovery probes (49.2%); POST 377,158 (50.8%). In the DB, 530,951 challenges had no request body and 194,761 had one. Classification by UA keyword is M; calling a UA that says "monitor" a monitor is trusting its self-description (E).

Dominant callers (proxy, 14d, challenges)

#User-Agent (identity)Challenges% of 402IPsType
1CarbonMonitor/0.1 healthcheck (carbon-cashmere.de)156,20421.5%1uptime monitor, never pays
2402explorer/0.1 (discover.paygent.net)120,51916.6%2indexer, never pays
3forum-labs-trust-prober/1.0 (forum-labs.com)114,52715.8%521distributed QoS prober, never pays
4MPP32 family (mpp32-indexer ×2 UAs, mri-indexer, MPP32-Health; agentrateindicators.com / mpp32.com)51,2207.1%≈27indexer, never pays
5python-httpx/0.28.1 (unlabeled; one IP = 30,895)32,0354.4%5unlabeled full-catalog sweeper
6CoinbaseBazaarDiscovery/1.0 (CDP)28,5993.9%5Coinbase Bazaar crawler
7node (unlabeled; one IP = 23,118)28,1383.9%50mixed; includes the broken payer below and 3 real payers
8Nitrograph-HealthCheck/1.022,4283.1%1monitor
9entropy-daemon-trust-oracle/2.020,7282.9%1monitor
1010x402-monitor / AgentTrustLayer (same IP hash 3d9078…)21,9753.0%1monitor that DID pay twice (wallet 0x2a07…, 08-26) and failed 8 times as mercator-gateway
Top 3 combined391,25053.9%
Dexter: Dexter-Verifier/1.0 is present but no longer paying: 371 challenges from 1 IP in 14d, 0 settles. Its last settle was 2026-08-05 (all-time 306 settles, $17.904, from Solana wallet TeSt… and 0x7e57…). It is not a dominant caller in this window.
Broken payer (biggest single "wanted to pay, could not" signal): caller hash d923…, UA node, wallet 0x8a1A037b…, Base. It paid 146 × $0.001 for bazaar-test between 2026-07-16 and 2026-08-14 08:21 UTC. Since 2026-08-14 12:46 UTC every attempt (143 all-time, 83 in the 14d window, roughly every 4 h, last 2026-09-07 00:31 UTC) fails because our facilitator answers HTTP 502 on /facilitator/verify (proxy retries 3×, then returns 502 to the caller; no settle_failed row is a real settle). Root cause (found 2026-09-07 05:50 UTC, reproduced): the wallet is out of USDC — on-chain balance 0.000008 USDC on Base, below the $0.001 price (146 × $0.001 spent). Coinbase CDP answers such a verify with HTTP 400 {"isValid":false,"invalidReason":"invalid_payload","invalidMessage":"contract call failed: … execution reverted"}; our provider-sdk treats any non-2xx as a ProviderError, the facilitator returns 502, the proxy treats 5xx as transient, retries 3× and hands the buyer a 502 instead of a 402 with invalidReason. Reproduced with a read-only verify from our own test wallet: $0.001 → 200 isValid:true; $100 (above its $7.85 balance) → 502 with exactly that CDP 400 body. The request path is not a factor. Our own Base QA wallet 0x0145… has the same problem: balance 0.000455 USDC, so its swap-quote verify has failed since ~08-25 (7 settles vs 105 verify-502s in 14d); the Solana QA wallet still pays 111/112. Nothing changed on our side on 08-14 (no commits, no restarts, config untouched since 05-31). Not fixed here (read-only): the fix is to parse a CDP 4xx body that carries isValid:false as a normal invalid verdict (insufficient_funds) so buyers get a 402 with a reason and no retries, plus a USDC top-up for the QA wallet.

B. GovHub api.suverse.io, 14 days (all rows)

StatusRowsIPsUAsWhat it is
40429,4371,9304,033scanners hitting non-existent paths (Agent402/1.0 UA with 799 IPs, WordPress, l9explore…)
40220,8881,08637challenges; top: node 8,089 (755 IPs, distributed crawler), mako-pulse-prober 7,787 (2 IPs), x402-list-monitor 1,256, CoinbaseBazaarDiscovery 728, x402-observer 708, vale-census-probe 351, ZeroBot 266, forum-labs 224 (211 IPs). Top endpoint: logistics.get_load_position 5,697.
2006,95788643free discovery docs (meta.discovery 3,207, meta.openapi 2,586, meta.services 710) + 82 prepaid agent.get_load
4051,64220062wrong method probes
24h GovHub: 402 = 817 (49 IPs, 20 UAs), 200 = 401, 404 = 2,121. Payment attempts 0.

3. Real revenue (external wallets only)

Bucket (14 days)SettlesUSDCDistinct payersNotes
All settles our facilitator executedM 1531.50400017facilitator_payments status=settled
− our own QA wallets (swap quote cron)1180.1180002GEyt… 111, 0x0145… 7; excluded
= External settlesM 351.38600015
  on data endpoints291.3800001413 endpoints; prices $0.001–$0.10
    by self-declared probes / observatories / censuses200.9660008vet402-observatory-l1 (14 settles, $0.863, wallets 0x6777… and 0xc9c7…), nohumans-scout, delivered-probe, payments-mcp-proxy, probe402-settle-leg, scvd-walkabout, csoai-settlement-census. Real money, but the buyer says it is measuring us, not using the data.
    by unlabeled clients (no UA / node / python-urllib3 / Chrome)90.41400060x27Ab… 3 × dex-trending-pools $0.10 (09-05); 0x1DeD… geo $0.05 (08-25); 0x2a07… wiki-random $0.06 + bazaar-test $0.001 (08-26, IP of 10x402-monitor); 0xb92a…, 0x8027…, 0xcF98… bazaar-test $0.001 each
  on swap quote ($0.001)60.00600043 of the 4 wallets also bought data endpoints
Refunds in windowM 00refunds_pending empty for window
24 hoursSettlesUSDCPayers
ExternalM 30.0030002
  bazaar-test $0.001 × 2 (csoai-settlement-census 06:39 UTC; node 0xcF98… 20:19 UTC) + swap quote $0.001 × 1 (0xcF98… 20:14 UTC)
Internal QA (excluded)80.0080001
"Last genuine external sale"When (UTC)EndpointAmountPayer / UA
Most recent external settle of any kind2026-09-06 20:19:45bazaar-test0.0010xcF98E5e2… / node (also bought a swap quote 5 min earlier; looks like a developer test)
Most recent external settle by a self-declared probe2026-09-06 06:39:13bazaar-test0.0010x4dB7AAFb… / csoai-settlement-census/0.1
Most recent external settle on a priced endpoint by a probe2026-09-06 01:01:04weather0.0500xc9c7b38C… / vet402-observatory-l1
Most recent external settle on a priced endpoint by an unlabeled buyer (best candidate for a real purchase)2026-09-05 02:30:54dex-trending-pools0.1000x27AbCDdd… / no UA; 3 purchases 00:35–02:30 UTC that night; same wallet paid twice on 08-14 with UA node; 5 settles all-time, $0.50
GovHub x402: no external sale ever. All-time external payers across the whole facilitator history: 197 wallets, 1,201 settles, $37.644 (since 2026-05-31) — for scale only.

4. The key ratio

Proxy 402 challenges split by whether the caller ever attempts payment (any endpoint, whole history since 2026-05-31)

Caller class (by hashed IP)Challenges 14d%Callers% callersChallenges 24h%
Never sent a payment header on any endpoint, ever ("pure lookers")M 650,01789.57%1,43397.6%M 33,84885.6%
Has settled somewhere at some pointM 57,7077.95%302.0%M 4,16110.5%
Has attempted but never settledM 18,0022.48%50.3%M 1,5383.9%
Within-window only (ignoring history): never attempted in window 703,501 challenges (96.94%) from 1,446 callers; settled in window 22,140 (3.05%) from 20 callers; attempted-only 85 from 2 callers. The 22,140 "payer" challenges are almost entirely the 10x402-monitor IP (21,975 challenges, 2 settles) — a monitor that pays occasionally still behaves like a looker. Caveats: IP-hash = caller is an approximation (forum-labs alone spans 521 IPs; a buyer behind several IPs is split); GovHub has 0 attempters so its 20,888 challenges are 100% lookers.

Would-buy-if-they-could vs never-would-buy

GroupCallersChallenges 14dMeasured or inferred
Proven buyers: settled in window (external)20 IPs / 15 wallets22,140M
Wanted to pay, blocked by us: the 0x8a1A… bot (83 failed verifies, was paying until 08-14)183M attempts; E that it would still pay if verify worked
Other attempted-but-failed in window (mercator-gateway 8, x402lint 2 deliberately invalid)2≈21,977 (shares IP with 10x402-monitor)M; lint is not a buyer
Self-declared monitors / indexers / crawlers, never attempted (many UAs literally say "no payment sent")1,175597,493M UA text; E never-would-buy
Unlabeled callers (generic client / browser / no UA), never attempted28052,524the only pool where a hidden buyer could sit
  …of which high-volume sweepers (≥1,000 challenges from one IP, e.g. python-httpx 30,895, node 23,118, Google-Cloud IP pool rotating phone UAs 1,233 each)≈15≈46,000E scanner behaviour, never-would-buy
  …of which low-volume (≤20 challenges) unlabeled callers226≈1,100M count
    …that actually sent a request body with parameters (behaved like someone trying to use the API)7 (4 of them on ≤3 endpoints, 6 challenges total)≈20M count; E these are the best "would-buy-if-they-could" candidates
Honest estimate (14 days, proxy):
• Measured floor of "would buy": 22 callers sent a payment header (1.5% of 1,468 callers); 15 external wallets actually paid.
E "Would-buy-if-they-could" beyond that: at most ≈8 more callers (7 low-volume unlabeled callers that sent real parameters and never paid, plus the 1 blocked payer). Upper bound ≈30 callers ≈ 2% of callers, responsible for well under 0.1% of challenge volume (≈100 of 725,726 challenges once the paying monitors' sweeps are excluded).
E "Never-would-buy": ≥98% of callers and ≥99.9% of 402 volume. By hard count, 89.6% of challenges come from IPs that have never sent a payment header in the entire history of the service; the remaining 10.4% comes from 35 IPs, of which 3 monitors alone generate 21,975 + 18,000 + 9,930-class sweeps.
• What is NOT measurable here: intent of a caller who reads the 402 body and leaves. Nothing in the logs distinguishes "no wallet" from "not interested"; the extensions.no_wallet hint has no click-through tracking.

5. Reproduction (read-only)

-- proxy funnel
select outcome, count(*) from proxy_request_logs where created_at >= '2026-08-24 05:00+00' and created_at < '2026-09-07 05:00+00' group by 1;
-- key ratio
with w as (select * from proxy_request_logs where created_at >= '2026-08-24 05:00+00' and created_at < '2026-09-07 05:00+00' and outcome='challenge'),
 h as (select ip_hash, bool_or(outcome='settled') s, bool_or(outcome='settle_failed') a from proxy_request_logs group by 1)
select case when s then 'settled_ever' when a then 'attempted_only' else 'never' end, count(*), count(distinct w.ip_hash) from w join h using(ip_hash) group by 1;
-- external revenue
select count(*), sum(gross_amount), count(distinct payer) from facilitator_payments where status='settled' and created_at >= '2026-08-24 05:00+00' and created_at < '2026-09-07 05:00+00' and payer not in (select address from internal_wallets);
-- govhub
select status_code, count(*), count(distinct ip_address) from requests where timestamp >= '2026-08-24 05:00+00' and timestamp < '2026-09-07 05:00+00' group by 1;
journalctl -u suverse-pay-api.service --since "2026-08-24 07:00" -o cat | grep -c '"url": "/facilitator/verify"'