<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: WayforthOfficial</title>
    <description>The latest articles on DEV Community by WayforthOfficial (@wayforthofficial).</description>
    <link>https://dev.to/wayforthofficial</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3903324%2Fd1a42870-c8f8-4453-a6f8-2f7df6156f13.png</url>
      <title>DEV Community: WayforthOfficial</title>
      <link>https://dev.to/wayforthofficial</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wayforthofficial"/>
    <language>en</language>
    <item>
      <title>We rebuilt Wayforth from the ground up. Here's what we learned.</title>
      <dc:creator>WayforthOfficial</dc:creator>
      <pubDate>Fri, 15 May 2026 18:55:30 +0000</pubDate>
      <link>https://dev.to/wayforthofficial/we-rebuilt-wayforth-from-the-ground-up-heres-what-we-learned-4po</link>
      <guid>https://dev.to/wayforthofficial/we-rebuilt-wayforth-from-the-ground-up-heres-what-we-learned-4po</guid>
      <description>&lt;p&gt;We launched Wayforth as "the search engine and payment rail for AI agents."&lt;/p&gt;

&lt;p&gt;That description was accurate. It just wasn't the &lt;br&gt;
whole picture — and in some ways it was pointing at &lt;br&gt;
the wrong thing.&lt;/p&gt;

&lt;p&gt;Since then we've shipped 10 production releases, &lt;br&gt;
removed a token we were planning to launch, rebuilt &lt;br&gt;
the ranking algorithm, added two payment rails, &lt;br&gt;
launched a provider intelligence dashboard, and &lt;br&gt;
listed on x402scan and Agentic.Market.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0pvc5ms7bdkxvmxyigf8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0pvc5ms7bdkxvmxyigf8.png" alt="Wayforth-Architecture" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the honest version of what happened.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Wayforth actually is
&lt;/h2&gt;

&lt;p&gt;Wayforth is an API runtime for autonomous AI agents.&lt;/p&gt;

&lt;p&gt;One MCP install. 3,000+ services. Three payment &lt;br&gt;
rails. Discovery, payment, and execution in a &lt;br&gt;
single tool call.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx wayforth-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent can now do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Search by intent — plain English
&lt;/span&gt;&lt;span class="nf"&gt;wayforth_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;translate to Spanish&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → DeepL WRI:82 · $0.00003/call · card | usdc | x402
&lt;/span&gt;
&lt;span class="c1"&gt;# Execute — no API key needed
&lt;/span&gt;&lt;span class="nf"&gt;wayforth_execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;slug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → "Hola" · 312ms · 1 credit
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No API key for DeepL. No DeepL account. No &lt;br&gt;
integration code. Wayforth holds the key, &lt;br&gt;
your agent gets the result.&lt;/p&gt;

&lt;p&gt;That works for 15 managed services today. For &lt;br&gt;
the other 3,000+ in the catalog, you bring your &lt;br&gt;
own key and Wayforth handles the proxy, &lt;br&gt;
monitoring, and payment.&lt;/p&gt;
&lt;h2&gt;
  
  
  The thing we got wrong
&lt;/h2&gt;

&lt;p&gt;When we launched, we were planning a $WAYF token.&lt;/p&gt;

&lt;p&gt;Staking pools. Verifier networks. Token-gated &lt;br&gt;
rankings. The whole thing.&lt;/p&gt;

&lt;p&gt;We cut all of it.&lt;/p&gt;

&lt;p&gt;The token complicated the story, added regulatory &lt;br&gt;
risk, and — most importantly — wasn't necessary. &lt;br&gt;
WayforthRank doesn't need a token to be &lt;br&gt;
defensible. It needs payment signal. And payment &lt;br&gt;
signal comes from real agents paying real money, &lt;br&gt;
which we can track without a blockchain token.&lt;/p&gt;

&lt;p&gt;Wayforth is a centralized infrastructure company. &lt;br&gt;
We own the ranking algorithm. We hold the managed &lt;br&gt;
keys. We process the routing fees. That clarity &lt;br&gt;
is the product.&lt;/p&gt;
&lt;h2&gt;
  
  
  What WayforthRank actually does
&lt;/h2&gt;

&lt;p&gt;This is the part worth understanding.&lt;/p&gt;

&lt;p&gt;Every service in the Wayforth catalog has a WRI &lt;br&gt;
score from 0–100. The score is computed from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verified payment signal (real agents paying)&lt;/li&gt;
&lt;li&gt;Uptime over the last 7 days&lt;/li&gt;
&lt;li&gt;Average response latency&lt;/li&gt;
&lt;li&gt;Tier verification status&lt;/li&gt;
&lt;li&gt;x402 support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The payment signal is what makes it defensible. &lt;br&gt;
A service can't buy a higher ranking — it can &lt;br&gt;
only earn one. And the signal only accumulates &lt;br&gt;
through Wayforth, which means it can't be &lt;br&gt;
replicated by a directory or a payment processor &lt;br&gt;
working separately.&lt;/p&gt;

&lt;p&gt;We formalized this as the &lt;strong&gt;WayforthRank &lt;br&gt;
Integrity Policy&lt;/strong&gt; — permanently legally &lt;br&gt;
enforceable, built into our Terms of Service:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No service can pay to rank higher. &lt;br&gt;
Zero sponsored placements. &lt;br&gt;
No advertising model. Ever.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Three payment rails
&lt;/h2&gt;

&lt;p&gt;One of the biggest changes since launch: we &lt;br&gt;
moved from crypto-only to three parallel rails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track A — Card (Stripe Treasury)&lt;/strong&gt;&lt;br&gt;
No crypto required. Developer tops up with a &lt;br&gt;
credit card, calls execute, Wayforth routes &lt;br&gt;
the credit. Mainstream developer, no wallet needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track B — USDC on Base&lt;/strong&gt;&lt;br&gt;
Non-custodial. Agent holds its own wallet, &lt;br&gt;
signs a transaction, WayforthEscrow routes &lt;br&gt;
the payment on-chain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track C — x402&lt;/strong&gt;&lt;br&gt;
HTTP 402 native. Agent pays and retries in &lt;br&gt;
one round-trip via Coinbase CDP.&lt;/p&gt;

&lt;p&gt;Same 1.5% routing fee on all three. Same &lt;br&gt;
WayforthRank signal from all three.&lt;/p&gt;
&lt;h2&gt;
  
  
  Self-healing payments
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnvsssgy4k4efgubiblk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnvsssgy4k4efgubiblk.png" alt="v0.6.10 Wayforth" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Shipped in v0.6.10 this week.&lt;/p&gt;

&lt;p&gt;If an API call fails — 5xx, timeout, unreachable &lt;br&gt;
— credits restore automatically. No dispute &lt;br&gt;
process. No support ticket. No human in the loop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Service unavailable"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"refunded"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"credits_restored"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"calls_remaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3498&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The WRI penalty still applies — a failed call &lt;br&gt;
counts against the service's rank. But the &lt;br&gt;
developer doesn't pay for it.&lt;/p&gt;
&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;3,271 services across 19 categories&lt;/li&gt;
&lt;li&gt;809 Tier 2 verified (probed every 6h, 
auto-demoted on 3 consecutive failures)&lt;/li&gt;
&lt;li&gt;277 x402-native services&lt;/li&gt;
&lt;li&gt;15 managed services (zero API key needed)&lt;/li&gt;
&lt;li&gt;298+ production API routes&lt;/li&gt;
&lt;li&gt;133/133 end-to-end tests passing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What we built for providers
&lt;/h2&gt;

&lt;p&gt;The Provider Dashboard launched as a separate &lt;br&gt;
B2B product in v0.6.8.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnk5x6lhkelsk3wo4og9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnk5x6lhkelsk3wo4og9.png" alt="v0.6.8 Wayforth" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Providers see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every search query that surfaced their service&lt;/li&gt;
&lt;li&gt;WRI score breakdown and history&lt;/li&gt;
&lt;li&gt;Anonymized competitor comparison&lt;/li&gt;
&lt;li&gt;Masked agent IDs and call patterns&lt;/li&gt;
&lt;li&gt;Estimated earnings at 98.5% of every payment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was a deliberate choice: providers should &lt;br&gt;
have enough intelligence to improve their service &lt;br&gt;
and earn better rankings — but not enough to &lt;br&gt;
game the system.&lt;/p&gt;
&lt;h2&gt;
  
  
  The x402 ecosystem
&lt;/h2&gt;

&lt;p&gt;We're now listed on x402scan as a native seller:&lt;br&gt;
GET &lt;a href="https://gateway.wayforth.io/x402/search" rel="noopener noreferrer"&gt;https://gateway.wayforth.io/x402/search&lt;/a&gt;&lt;br&gt;
→ HTTP 402&lt;br&gt;
{&lt;br&gt;
"x402Version": 2,&lt;br&gt;
"accepts": [{&lt;br&gt;
"scheme": "exact",&lt;br&gt;
"network": "eip155:8453",&lt;br&gt;
"amount": "2000",&lt;br&gt;
"asset": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",&lt;br&gt;
"payTo": "0xb59f678a1bd568b3599756947ad965760038cf40",&lt;br&gt;
"maxTimeoutSeconds": 300&lt;br&gt;
}]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;$0.002 USDC per search query. An agent can &lt;br&gt;
discover and pay for Wayforth without any &lt;br&gt;
prior relationship or API key.&lt;/p&gt;

&lt;p&gt;We're also x402 v2 compliant with Bazaar &lt;br&gt;
discovery extension — Agentic.Market indexes &lt;br&gt;
us automatically when the first real payment &lt;br&gt;
goes through.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;v0.7.0 — Gravity.&lt;/p&gt;

&lt;p&gt;First real revenue. Stripe subscriptions live. &lt;br&gt;
Provider payouts. Base mainnet deployment &lt;br&gt;
(post-audit). The flywheel starts.&lt;/p&gt;



&lt;p&gt;If you're building AI agents and need external &lt;br&gt;
APIs, try it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx wayforth-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;100 free calls. No card. No setup.&lt;/p&gt;

&lt;p&gt;GitHub: github.com/WayforthOfficial/wayforth&lt;br&gt;&lt;br&gt;
Docs: wayforth.io&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>mcp</category>
      <category>python</category>
    </item>
    <item>
      <title>How We Hardened the Wayforth Gateway - Complete Security Audit</title>
      <dc:creator>WayforthOfficial</dc:creator>
      <pubDate>Tue, 05 May 2026 01:58:32 +0000</pubDate>
      <link>https://dev.to/wayforthofficial/how-we-hardened-the-wayforth-gateway-complete-security-audit-31n4</link>
      <guid>https://dev.to/wayforthofficial/how-we-hardened-the-wayforth-gateway-complete-security-audit-31n4</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h2wbzd5bbgkxxy4tmuy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h2wbzd5bbgkxxy4tmuy.gif" alt="Wayforth_Demo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We shipped Wayforth — a search and payment rail &lt;br&gt;
for AI agents — and before expanding the managed &lt;br&gt;
services catalog we ran a full security audit.&lt;/p&gt;

&lt;p&gt;Here's how we fixed it.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;p&gt;FastAPI · PostgreSQL · Railway · Base blockchain&lt;br&gt;&lt;br&gt;
Supabase Auth · Stripe · Fernet AES-128 · BSL 1.1&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx wayforth-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Critical Findings (5)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;C1 — JWT not cryptographically verified&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fix: JWKS-based ES256 verification via Supabase's &lt;br&gt;
public endpoint — no shared secret needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_supabase_jwt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;jwks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_jwks&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# cached 1hr
&lt;/span&gt;    &lt;span class="n"&gt;header&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_unverified_header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;jwks&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;public_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ECAlgorithm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_jwk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;algorithms&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ES256&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;audience&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;authenticated&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;C2 — CORS wildcard + credentials&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fix: Explicit origins only.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;allow_origins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://wayforth.io&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.wayforth.io&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:5173&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;C3 — Admin key timing oracle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fix: &lt;code&gt;secrets.compare_digest()&lt;/code&gt; in all 11 places.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C4 — BYOK silent plaintext fallback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fix: Both now raise HTTP 500 instead of &lt;br&gt;
silently degrading security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C5 — Webhook IDOR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fix: Ownership verified before delete.&lt;/p&gt;

&lt;h2&gt;
  
  
  High Findings (5)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;H1&lt;/strong&gt; — Fernet key entropy: invalid keys now 
raise &lt;code&gt;ValueError&lt;/code&gt; at call time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;H2/H3&lt;/strong&gt; — BYOK encrypt/decrypt fail silently: 
both raise HTTP 500&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;H4&lt;/strong&gt; — No security headers: added 
&lt;code&gt;X-Frame-Options&lt;/code&gt;, &lt;code&gt;X-Content-Type-Options&lt;/code&gt;, 
&lt;code&gt;HSTS&lt;/code&gt;, &lt;code&gt;Referrer-Policy&lt;/code&gt;, &lt;code&gt;Permissions-Policy&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;H5&lt;/strong&gt; — &lt;code&gt;supabase_id&lt;/code&gt; echoed in 401 body: 
removed (account enumeration vector)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frontend Findings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;API key written to &lt;code&gt;localStorage&lt;/code&gt; on signup → 
moved to &lt;code&gt;sessionStorage&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Admin token in &lt;code&gt;localStorage&lt;/code&gt; → &lt;code&gt;sessionStorage&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;No expired session handler → global 401 
interceptor now redirects to &lt;code&gt;/login&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;innerHTML&lt;/code&gt; with API responses → escaped&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Was Already Clean
&lt;/h2&gt;

&lt;p&gt;SQL injection — parameterized everywhere, zero &lt;br&gt;
string concatenation. No &lt;code&gt;eval()&lt;/code&gt; or &lt;code&gt;exec()&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
API keys — SHA-256 hashed, never logged.&lt;br&gt;&lt;br&gt;
Admin passwords — bcrypt.&lt;br&gt;&lt;br&gt;
Key generation — &lt;code&gt;secrets.token_urlsafe()&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
&lt;code&gt;.env&lt;/code&gt; in &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;20 findings. All resolved.&lt;br&gt;
Zero open findings before expanding the catalog.&lt;/p&gt;




&lt;p&gt;Try it: &lt;code&gt;uvx wayforth-mcp&lt;/code&gt;&lt;br&gt;&lt;br&gt;
GitHub: github.com/WayforthOfficial/wayforth&lt;br&gt;&lt;br&gt;
Docs: wayforth.io&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>python</category>
      <category>security</category>
    </item>
    <item>
      <title>Wayforth — A Search Engine and Payment Rail for AI Agents</title>
      <dc:creator>WayforthOfficial</dc:creator>
      <pubDate>Wed, 29 Apr 2026 01:23:35 +0000</pubDate>
      <link>https://dev.to/wayforthofficial/wayforth-a-search-engine-and-payment-rail-for-ai-agents-3ljk</link>
      <guid>https://dev.to/wayforthofficial/wayforth-a-search-engine-and-payment-rail-for-ai-agents-3ljk</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff96ydkviic63r6x77mzf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff96ydkviic63r6x77mzf.png" alt="Wayforth Official" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Every AI agent that calls external services — inference, translation, &lt;br&gt;
data, images, audio — requires the developer to manually find each API, &lt;br&gt;
sign up, manage keys, write integration code, and handle billing &lt;br&gt;
separately for every provider.&lt;/p&gt;

&lt;p&gt;One agent workflow can touch a dozen services. That doesn't scale.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwsjvp65hcpp99a4m1w8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwsjvp65hcpp99a4m1w8.png" alt="Wayforth Install" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wayforth. One install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx wayforth-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then two tool calls from any agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Discover
&lt;/span&gt;&lt;span class="nf"&gt;wayforth_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;translate text to Spanish&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → DeepL API       WRI: 82  Tier 2 Verified  $0.0000025/req
# → LibreTranslate  WRI: 71  Tier 2 Verified  Free
# → ModernMT        WRI: 68  Tier 2 Verified  $0.000003/req
&lt;/span&gt;
&lt;span class="c1"&gt;# Pay
&lt;/span&gt;&lt;span class="nf"&gt;wayforth_pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;service_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;owner_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount_usdc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → Non-custodial calldata. Settles on Base in ~2 seconds.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No API keys. No billing relationships. No integration code.&lt;/p&gt;

&lt;p&gt;Works in Claude Code, Cursor, Windsurf, and any MCP-compatible runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Live
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqtlslttqkyx9f55qygf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqtlslttqkyx9f55qygf.png" alt="Wayforth Live Demo" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;200+ real API endpoints&lt;/strong&gt; across 7 categories — inference, data, &lt;br&gt;
translation, image, code, audio, embeddings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;165+ Tier 2 verified services&lt;/strong&gt; — automatically probed every 6 hours, &lt;br&gt;
90%+ uptime required, auto-demoted after 3 consecutive failures. &lt;br&gt;
No paid placement. Ever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WayforthRank&lt;/strong&gt; — a proprietary ranking engine combining semantic &lt;br&gt;
relevance, reliability history, and real agent payment conversion &lt;br&gt;
signals. Rankings improve with every query. (Patent pending)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart contracts on Base Sepolia&lt;/strong&gt; — non-custodial escrow, audited, &lt;br&gt;
Basescan verified. Mainnet Q3 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tiered routing fee 0.75%–1.5%&lt;/strong&gt; — the only cost. No fixed fee. &lt;br&gt;
Viable for sub-cent micro-transactions.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;Four layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Settlement Layer&lt;/strong&gt; — Base blockchain, WayforthEscrow, USDC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification Layer&lt;/strong&gt; — Coverage tier system, automated probing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligence Layer&lt;/strong&gt; — WayforthRank, Service Graph, Wayforth Identity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Layer&lt;/strong&gt; — MCP server, Python SDK, TypeScript SDK, WayforthQL&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  WayforthRank — How Ranking Works
&lt;/h2&gt;

&lt;p&gt;WRI (Wayforth Reliability Index) is a score from 0–100 combining:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Base score&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tier 2 verified&lt;/td&gt;
&lt;td&gt;+20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero failures&lt;/td&gt;
&lt;td&gt;+10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Probed within 24h&lt;/td&gt;
&lt;td&gt;+10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;x402 protocol&lt;/td&gt;
&lt;td&gt;+5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent popularity (7d)&lt;/td&gt;
&lt;td&gt;+5 max&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment conversions (7d)&lt;/td&gt;
&lt;td&gt;+8 max&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The payment conversion signal is the strongest — it only accumulates &lt;br&gt;
from real agent payments. A competitor needs 12+ months of real agent &lt;br&gt;
payment data to replicate it.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Data Flywheel
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dp8sv3tmwqbzqnk4jc5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dp8sv3tmwqbzqnk4jc5.png" alt="Wayforth Flywheel" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every search query links to a &lt;code&gt;query_id&lt;/code&gt;. When an agent pays for a &lt;br&gt;
service, that payment converts the search record and feeds WayforthRank. &lt;br&gt;
Rankings improve with every real transaction.&lt;/p&gt;
&lt;h2&gt;
  
  
  WayforthQL — Structured Queries
&lt;/h2&gt;

&lt;p&gt;For agents that need more control:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/query&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fast inference for coding agents"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tier_min"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"x402"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sort_by"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"wri"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price_max"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Developer Dashboard
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpf8uibjf7slksm37n7al.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpf8uibjf7slksm37n7al.png" alt="Wayforth Dev Dashboard" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every developer gets a personal dashboard at wayforth.io/dashboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API key management&lt;/li&gt;
&lt;li&gt;Usage and quota tracking&lt;/li&gt;
&lt;li&gt;Search history and analytics&lt;/li&gt;
&lt;li&gt;Service reliability trends&lt;/li&gt;
&lt;li&gt;Agent identity trust scores&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free tier — 1,000 searches/month. No credit card required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx wayforth-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://wayforth.io" rel="noopener noreferrer"&gt;https://wayforth.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/WayforthOfficial/wayforth" rel="noopener noreferrer"&gt;https://github.com/WayforthOfficial/wayforth&lt;/a&gt; (BSL 1.1)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyPI:&lt;/strong&gt; &lt;a href="https://pypi.org/project/wayforth-mcp/" rel="noopener noreferrer"&gt;https://pypi.org/project/wayforth-mcp/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quickstart:&lt;/strong&gt; &lt;a href="https://wayforth.io/quickstart" rel="noopener noreferrer"&gt;https://wayforth.io/quickstart&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whitepaper:&lt;/strong&gt; &lt;a href="https://wayforth.io/wayforth-whitepaper-v3.pdf" rel="noopener noreferrer"&gt;https://wayforth.io/wayforth-whitepaper-v3.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to answer questions about the WayforthRank architecture, &lt;br&gt;
payment routing design, or the coverage tier system.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
