{"slug": "i-optimized-an-api-for-ai-agents-instead-of-humans-here-s-what-one-week-of-data", "title": "I optimized an API for AI agents instead of humans. Here's what one week of data looked like.", "summary": "A developer built a paid MCP server offering Korean business verification, priced per call in USDC over x402, and logged 23,980 requests in its first week — but only two were real external tool calls, with zero third-party payments. The developer attributed the gap to a product-shape problem: the API requires a 10-digit business registration number that agents evaluating an overseas supplier typically don't have, and noted that a free tier caused the x402 Bazaar validator to skip the resource entirely. The writeup also describes a growing ecosystem of watcher bots, including kkj-x402-trust-index and x402-census-probe, that discovered and scanned the server within days.", "body_md": "Two weeks ago I put a paid MCP server online: Korean business verification, priced per call in USDC over x402. [I wrote up the build here.](https://dev.to1%ED%8E%B8%20%EB%A7%81%ED%81%AC) This is the follow-up nobody writes — the part where you check whether anyone actually showed up.\n\nShort version: 23,980 requests in seven days, and two of them were real.\n\nHere's what I learned from the gap between those two numbers.\n\nThe experiment\n\nOne hypothesis, one number to falsify it. Hypothesis: if agents can discover a priced API and pay for it autonomously, some of them will. Success bar: 20 real tool calls in the first week after launch. I wrote that number down before launching, which turned out to be the single most useful thing I did.\n\n| Metric | Day 0 | Week 1 | \n|---|---|---|\n| Requests (7 days) | ~8,700 | 23,980 | \n| Real external tool calls | 0 | 2 | \n| Third-party payments | 0 | 0 | \n\nRequests nearly tripled. Real usage went from zero to two. Every payment in my receiving wallet is still one I made myself.\n\nBreaking the 41 logged tool calls down by origin: 7 were my own indexing payments, 32 were crawlers requesting the literal path template from the discovery catalog (/v1/business/:brno/status — they call the placeholder, not a real number), and 2 were actual external calls. Both on the same day, hours apart, then nothing for six days.\n\nSo: missed the bar by a factor of ten.\n\nThe traffic wasn't fake. It just wasn't people.\n\nAfter getting listed in the x402 Bazaar, a new class of visitor showed up: kkj-x402-trust-index (its user agent says it verifies Bazaar-listed x402 resources), allow402-quote, x402-observer, x402-census-probe, plus the usual liveness bots that announce \"never invokes tools\" in their UA string.\n\nAn ecosystem of watchers has grown up around agent payments, and it found me within days. There's something genuinely encouraging in that: the infrastructure works. Discovery works. Listings propagate. Scanners verify you. What hasn't arrived is the buyer.\n\nThe thing I'd fix first if I started over\n\nHere's the mistake I only saw when I stopped looking at request counts and started reading connection logs.\n\n69 handshakes. 17 curl calls. 39 from python-requests. People connected. Almost none of them executed a tool.\n\nMy server takes a 10-digit Korean business registration number as input. But if you're an agent outside Korea evaluating a supplier, what you have is a name — \"Hanil Trading Co., Ltd\" — not a registration number. That number lives on invoices and contracts, which means by the time you can use my API, you already have a relationship with the company.\n\nI built a tool that requires you to already have the thing you came looking for.\n\nThat's not a discovery problem or a pricing problem. It's the shape of the product. No amount of catalog optimization helps when the first input field is one your user can't fill in.\n\nThree things I'd tell anyone shipping a priced API for agents\n\nStart from the agent's task, not your data. \"Look up a registration number\" is a data endpoint. \"Decide whether to transact with this supplier\" is a task. Agents arrive with tasks. If your endpoint sits in the middle of one, you have to own the entrance too, or someone else's tool will.\n\nA free tier is a discovery liability, not just a pricing decision. The Bazaar validator checks that an unpaid request returns 402. My friendly free tier returned a cheerful 200, so the catalog concluded the resource wasn't payable and skipped it entirely. Default-paid with opt-in free (?free=1) fixed it — and closed the hole where rotating IPs got unlimited free calls.\n\nCatalogs index routes, not servers, and only after a payment settles on that route. Each of my three endpoints stayed invisible until I'd paid for that specific one myself. Worse, all three had near-identical descriptions, so every query surfaced the same route. Rewriting them by intent — status for \"is this company still operating\", batch for \"screen this supplier list\", verify for \"KYB identity match\" — made queries that never mention Korea start returning the right one. Highest-leverage hour I spent all month.\n\nWhere the next two weeks go\n\nNot into more distribution. Two things:\n\nAn entrance. Resolve a company name to a registration number, so an agent can start from what it actually has. Harder than it sounds — name matching is fuzzy, so the honest design returns ranked candidates with evidence, not one confident answer.\n\nSignals worth paying for. Debarment records, sanction history, status changes over time. One call that answers \"should I transact with this company\" instead of \"does this number exist\".\n\nThen I measure again the same way: number written down first, honest count after.\n\nIf you're building something agent-facing and have run your own numbers, I'd like to compare. My suspicion is that a lot of us are shipping data endpoints into a market that only buys finished tasks — and that the distance between 23,980 and 2 is mostly the shape of what we built, not the size of the market.", "url": "https://wpnews.pro/news/i-optimized-an-api-for-ai-agents-instead-of-humans-here-s-what-one-week-of-data", "canonical_source": "https://dev.to/wonderfulian/i-optimized-an-api-for-ai-agents-instead-of-humans-heres-what-one-week-of-data-looked-like-ec6", "published_at": "2026-09-23 00:43:57+00:00", "updated_at": "2026-09-23 01:22:46.529371+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-infrastructure", "ai-tools"], "entities": ["x402", "MCP", "x402 Bazaar", "USDC", "kkj-x402-trust-index", "allow402-quote", "x402-observer", "x402-census-probe"], "alternates": {"html": "https://wpnews.pro/news/i-optimized-an-api-for-ai-agents-instead-of-humans-here-s-what-one-week-of-data", "markdown": "https://wpnews.pro/news/i-optimized-an-api-for-ai-agents-instead-of-humans-here-s-what-one-week-of-data.md", "text": "https://wpnews.pro/news/i-optimized-an-api-for-ai-agents-instead-of-humans-here-s-what-one-week-of-data.txt", "jsonld": "https://wpnews.pro/news/i-optimized-an-api-for-ai-agents-instead-of-humans-here-s-what-one-week-of-data.jsonld"}}