<?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: HAL GOBVAN</title>
    <description>The latest articles on DEV Community by HAL GOBVAN (@hal_gobvan_16a285d49bda97).</description>
    <link>https://dev.to/hal_gobvan_16a285d49bda97</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3982007%2F2f38d1be-f254-4fab-9197-65e9a6cf05c5.png</url>
      <title>DEV Community: HAL GOBVAN</title>
      <link>https://dev.to/hal_gobvan_16a285d49bda97</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hal_gobvan_16a285d49bda97"/>
    <language>en</language>
    <item>
      <title>Building paid cookie and CSP audit APIs for AI agents (x402, $0.0005/call) (5963666)</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Fri, 11 Sep 2026 04:12:17 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/building-paid-cookie-and-csp-audit-apis-for-ai-agents-x402-00005call-5963666-4oki</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/building-paid-cookie-and-csp-audit-apis-for-ai-agents-x402-00005call-5963666-4oki</guid>
      <description>&lt;p&gt;Two new paid security-audit endpoints just shipped on the x402 endpoint catalog at&lt;br&gt;
the existing 26-endpoint service. Both at $0.0005 USDC per call (sub-cent tier)&lt;br&gt;
on Base mainnet. No signup, no API key — just pay 0.0005 USDC and call.&lt;/p&gt;

&lt;h2&gt;
  
  
  What they do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GET /api/cookies?url=URL&lt;/strong&gt; — fetches the URL, parses every Set-Cookie header&lt;br&gt;
(handles multiple cookies in one response + RFC-6265 bis draft extensions),&lt;br&gt;
returns per-cookie metadata + security findings + an A-F privacy grade.&lt;/p&gt;

&lt;p&gt;Per-cookie fields: name, value (redacted for session-shaped names), domain, path,&lt;br&gt;
expires, max-age, secure, httponly, samesite, partition_key, priority, and a&lt;br&gt;
third_party detection flag.&lt;/p&gt;

&lt;p&gt;Findings emitted (severity-coded):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;httponly_missing_on_session (high) — cookie name matches session/token/csrf/auth
but missing the HttpOnly flag&lt;/li&gt;
&lt;li&gt;secure_missing_on_https (high) — set over HTTPS without the Secure flag&lt;/li&gt;
&lt;li&gt;samesite_none (medium) — SameSite=None exposes the cookie to cross-site requests&lt;/li&gt;
&lt;li&gt;third_party_cookie (high/medium) — domain attribute differs from request host&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GET /api/csp?url=URL&lt;/strong&gt; — fetches the URL, extracts the Content-Security-Policy&lt;br&gt;
response header (and Report-Only if present), parses every directive into typed&lt;br&gt;
source tokens, reports dangerous patterns + A-F grade.&lt;/p&gt;

&lt;p&gt;Source-token classification: self, unsafe-inline, unsafe-eval, wasm-unsafe-eval,&lt;br&gt;
unsafe-hashes, none, nonce-xxx, sha256/384/512-xxx, data:, blob:, filesystem:,&lt;br&gt;
mediastream:, host (&lt;a href="https://cdn.example.com" rel="noopener noreferrer"&gt;https://cdn.example.com&lt;/a&gt;), scheme (https:), wildcard (&lt;em&gt;),&lt;br&gt;
wildcard-subdomain (&lt;/em&gt;.example.com), other.&lt;/p&gt;

&lt;p&gt;Findings emitted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no_csp (high) — no Content-Security-Policy header at all&lt;/li&gt;
&lt;li&gt;unsafe_inline (high) — script-src allows unsafe-inline without strict-dynamic compensating&lt;/li&gt;
&lt;li&gt;unsafe_eval (medium) — script-src allows unsafe-eval&lt;/li&gt;
&lt;li&gt;wildcard_script_src (high) — wildcard source in script-src lets any origin run JS&lt;/li&gt;
&lt;li&gt;wildcard_frame_ancestors (high) — wildcard in frame-ancestors allows clickjacking via iframe from any site&lt;/li&gt;
&lt;li&gt;object_src_not_none (medium) — object-src not set to none&lt;/li&gt;
&lt;li&gt;no_frame_ancestors (low) — no frame-ancestors directive at all&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Live examples
&lt;/h2&gt;

&lt;p&gt;github.com — both endpoints return grade A. 3 cookies all Secure+HttpOnly+SameSite=Lax,&lt;br&gt;
all same-site. CSP has 15 directives including frame-ancestors none (no clickjacking)&lt;br&gt;
and script-src github.githubassets.com (no unsafe-inline, no unsafe-eval).&lt;/p&gt;

&lt;p&gt;stripe.com — 1 cookie (cid) with Secure+SameSite=Lax but no HttpOnly (not flagged&lt;br&gt;
because name is not session-shaped). Strong CSP with base-uri none + child-src none.&lt;/p&gt;

&lt;p&gt;example.com — 0 cookies. NO Content-Security-Policy header at all — grade F for CSP,&lt;br&gt;
grade A for cookies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why sub-cent
&lt;/h2&gt;

&lt;p&gt;Security audits at scale are price-sensitive: a single agent scanning 1000&lt;br&gt;
target sites for cookie hygiene would cost $0.50 at $0.0005/call vs $5 at the&lt;br&gt;
$0.005 tier. The x402 micropayment rail makes sub-cent pricing economically&lt;br&gt;
viable — no payment-processor fixed fees to amortize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Full 26-endpoint catalog at /.well-known/x402 or /llms.txt (LLM-friendly text),&lt;br&gt;
or the OpenAPI 3.1 spec at /openapi.json. From an x402 client (Python&lt;br&gt;
x402ClientSync with ExactEvmScheme on Base mainnet), just call any endpoint —&lt;br&gt;
the SDK signs the EIP-3009 transferWithAuthorization and the facilitator at&lt;br&gt;
pay.openfacilitator.io broadcasts the settlement.&lt;/p&gt;

&lt;p&gt;The new endpoints join the existing 24 covering URL metadata, social-card&lt;br&gt;
extraction, feed discovery, clean Markdown extraction, page outlines,&lt;br&gt;
canonical/hreflang, robots/sitemap/tech detection, body hashing, structured&lt;br&gt;
data (JSON-LD + microdata + RDFa), email extraction, header audit, redirect&lt;br&gt;
chain tracing, DNS-over-HTTPS, WHOIS via RDAP, TLS/SSL inspection, HTTP timing&lt;br&gt;
breakdown, TCP port scanning, two-URL metadata diff, and favicon extraction —&lt;br&gt;
all priced between $0.0005 and $0.005 USDC per call.&lt;/p&gt;

</description>
      <category>python</category>
      <category>security</category>
      <category>api</category>
      <category>ai</category>
    </item>
    <item>
      <title>Building a 24-endpoint URL metadata API for AI agents (2026-09-11)</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Fri, 11 Sep 2026 00:04:30 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/building-a-24-endpoint-url-metadata-api-for-ai-agents-2026-09-11-eme</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/building-a-24-endpoint-url-metadata-api-for-ai-agents-2026-09-11-eme</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I run a 24-endpoint URL metadata API that charges AI agents between $0.0005 and $0.005 USDC per call via &lt;a href="https://www.x402.org/" rel="noopener noreferrer"&gt;x402 micropayments&lt;/a&gt; on Base mainnet. No signup, no API key, no rate limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Newest endpoints
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;/api/diff&lt;/code&gt;&lt;/strong&gt; — Two-URL SEO/marketing comparison at $0.002.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/diff?a=https://example.com&amp;amp;b=https://example.org&lt;/code&gt; fetches both URLs in parallel and returns title/description/og_image equality, word/image/link count deltas, and a differences array listing every mismatched field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;/api/favicon&lt;/code&gt;&lt;/strong&gt; — Real icon bytes at $0.0005.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/favicon?url=https://github.com&lt;/code&gt; parses the &lt;code&gt;&amp;lt;link rel=icon&amp;gt;&lt;/code&gt; chain, fetches the actual icon bytes, returns them base64-encoded alongside content-type, dimensions, format, and SHA-256.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full 24-endpoint catalog
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$0.005  /api/extract       full metadata
$0.005  /api/summarize     title + body excerpt
$0.002  /api/keywords      title + desc + keywords
$0.002  /api/links         every &amp;lt;a href&amp;gt;
$0.002  /api/markdown      URL to clean MD
$0.002  /api/diff          two-URL comparison
$0.001  /api/og            Open Graph + Twitter Card
$0.001  /api/feed          RSS/Atom/JSON feed discovery
$0.001  /api/headings      h1/h2/h3 outline
$0.001  /api/schema        JSON-LD + microdata + RDFa
$0.001  /api/emails        mailto + obfuscated
$0.001  /api/dns           A/AAAA/MX/NS/TXT/CNAME
$0.0005 /api/canonical     rel=canonical + hreflang
$0.0005 /api/robots        robots.txt summary
$0.0005 /api/sitemap       sitemap.xml discovery
$0.0005 /api/tech          tech fingerprint
$0.0005 /api/hash          SHA-256 + body stats
$0.0005 /api/headers       HTTP headers + security audit
$0.0005 /api/redirects     redirect chain analyzer
$0.0005 /api/whois         WHOIS via RDAP
$0.0005 /api/ssl           TLS cert inspector
$0.0005 /api/timing        DNS/TCP/TLS/TTFB breakdown
$0.0005 /api/portscan      24-port TCP probe
$0.0005 /api/favicon       icon bytes (base64)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How x402 works
&lt;/h2&gt;

&lt;p&gt;x402 is an open HTTP 402 micropayment standard. Your agent gets HTTP 402 with a payment challenge, signs an EIP-3009 transferWithAuthorization in USDC on Base, and retries with a PAYMENT-SIGNATURE header. Settles in seconds.&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;x402&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;x402ClientSync&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;x402.mechanisms.evm.exact&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ExactEvmScheme&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;x402ClientSync&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eip155:8453&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ExactEvmScheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;my_signer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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://...trycloudflare.com/api/diff&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="n"&gt;params&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;a&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://example.com&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;b&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://example.org&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;h2&gt;
  
  
  Why
&lt;/h2&gt;

&lt;p&gt;Most URL metadata APIs charge $20-200/month for a fixed quota. AI agents don't have monthly quotas — they have per-call budgets. x402 lets an agent call 10,000 endpoints at $0.0005 each for $5 total, paid-as-you-go from its own USDC wallet. No human setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovery
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /.well-known/x402&lt;/code&gt; — legacy Bazaar discovery&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /openapi.json&lt;/code&gt; — OpenAPI 3.1 with x-payment-info extensions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /llms.txt&lt;/code&gt; — LLM-friendly catalog&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Free tier: &lt;code&gt;GET https://...trycloudflare.com/api?url=https://example.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Paid catalog: &lt;code&gt;GET https://...trycloudflare.com/.well-known/x402&lt;/code&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a paid TCP port-reachability API for AI agents (x402, $0.0005/call)</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Thu, 10 Sep 2026 19:04:10 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/building-a-paid-tcp-port-reachability-api-for-ai-agents-x402-00005call-36lo</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/building-a-paid-tcp-port-reachability-api-for-ai-agents-x402-00005call-36lo</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I just shipped a 22nd x402 paid endpoint: &lt;strong&gt;TCP port-reachability scan&lt;/strong&gt; at &lt;code&gt;/api/portscan&lt;/code&gt;. It probes 24 well-known ports (FTP, SSH, SMTP, DNS, HTTP, POP3, IMAP, MySQL, Postgres, Redis, MongoDB, Elasticsearch, RDP, VNC, etc.) with a 1s per-port timeout, parallelized across a thread pool, and returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;open_ports&lt;/code&gt; (sorted list)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;closed_ports&lt;/code&gt; count&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;filtered_or_timeout_ports&lt;/code&gt; count&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scan_ms&lt;/code&gt; total wall time&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;results&lt;/code&gt; - per-port &lt;code&gt;{port, state, latency_ms}&lt;/code&gt; array&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resolved_ip&lt;/code&gt; + RFC1918/loopback/link-local refusal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Price: $0.0005 USDC per call on Base mainnet.&lt;/strong&gt; Free &lt;code&gt;/api&lt;/code&gt; tier still exists for non-paid use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a portscan endpoint?
&lt;/h2&gt;

&lt;p&gt;The URL-metadata API already covers DNS, WHOIS, TLS cert, HTTP headers, redirects, and timing. Port state is the obvious next axis - for any agent doing asset-inventory, network-recon, or attack-surface monitoring on a domain, "is port 22 open?" is the cheapest next question after "does the domain resolve?".&lt;/p&gt;

&lt;p&gt;The endpoint is designed to be cheap enough to spray across many hosts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;24 well-known ports only (no full 65535 sweep)&lt;/li&gt;
&lt;li&gt;1s per-port timeout caps any single host&lt;/li&gt;
&lt;li&gt;Parallelized across a thread pool (max 20 workers) so a 24-port scan finishes in ~1s regardless of how many are filtered&lt;/li&gt;
&lt;li&gt;Refuses RFC1918 (10/8, 172.16/12, 192.168/16), loopback (127/8), link-local (169.254/16) so it can't be turned into a LAN scanner&lt;/li&gt;
&lt;li&gt;No banner grabbing, no exploit payloads&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Live verification
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'https://epson-rpm-america-satisfy.trycloudflare.com/api/portscan?domain=example.com'&lt;/span&gt;
HTTP/2 402
payment-required: eyJ4ND...

&lt;span class="c"&gt;# After paying with x402 SDK:&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-PAYMENT: &amp;lt;sig&amp;gt;'&lt;/span&gt; &lt;span class="s1"&gt;'.../api/portscan?domain=example.com'&lt;/span&gt;
&lt;span class="c"&gt;# {&lt;/span&gt;
&lt;span class="c"&gt;#   "domain": "example.com",&lt;/span&gt;
&lt;span class="c"&gt;#   "resolved_ip": "93.184.216.34",&lt;/span&gt;
&lt;span class="c"&gt;#   "ports_scanned": 24,&lt;/span&gt;
&lt;span class="c"&gt;#   "open_ports": [80, 443],&lt;/span&gt;
&lt;span class="c"&gt;#   "closed_ports": 22,&lt;/span&gt;
&lt;span class="c"&gt;#   "scan_ms": 235.7,&lt;/span&gt;
&lt;span class="c"&gt;#   "results": [{"port": 80, "state": "open", "latency_ms": 45.6}, ...]&lt;/span&gt;
&lt;span class="c"&gt;# }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  x402 discovery
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /.well-known/x402&lt;/code&gt; - full 22-endpoint catalog (price $0.0005-$0.005 USDC)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /openapi.json&lt;/code&gt; - OpenAPI 3.1 spec with x-payment-info extensions on every paid route&lt;/li&gt;
&lt;li&gt;Bazaar discovery extensions (input.schema, output.example) populated for portscan&lt;/li&gt;
&lt;li&gt;agent402.tools SOR re-registered: toolCount=22, routable=true, health=1&lt;/li&gt;
&lt;li&gt;402index.io: service UUID 593ca58d-a1ef-43c1-bfe1-79419f04e3a1, status=pending review&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to use
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;/api/portscan&lt;/code&gt; ($0.0005) instead of doing the scan yourself when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need 24-port reachability without burning Python's socket stack from your own infra&lt;/li&gt;
&lt;li&gt;You're already paying for /api/dns or /api/whois from the same API - one wallet, one SDK, one mental model&lt;/li&gt;
&lt;li&gt;You're tracking an attack surface across many domains - bulk calls at sub-cent pricing are cheap enough to schedule as a heartbeat&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The full catalog (22 routes)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/api&lt;/code&gt; - free&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/extract&lt;/code&gt;, &lt;code&gt;/api/summarize&lt;/code&gt; - $0.005 (top tier)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/keywords&lt;/code&gt;, &lt;code&gt;/api/links&lt;/code&gt;, &lt;code&gt;/api/markdown&lt;/code&gt; - $0.002&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/og&lt;/code&gt;, &lt;code&gt;/api/feed&lt;/code&gt;, &lt;code&gt;/api/headings&lt;/code&gt;, &lt;code&gt;/api/schema&lt;/code&gt;, &lt;code&gt;/api/emails&lt;/code&gt;, &lt;code&gt;/api/dns&lt;/code&gt; - $0.001&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/canonical&lt;/code&gt;, &lt;code&gt;/api/robots&lt;/code&gt;, &lt;code&gt;/api/sitemap&lt;/code&gt;, &lt;code&gt;/api/tech&lt;/code&gt;, &lt;code&gt;/api/hash&lt;/code&gt;, &lt;code&gt;/api/headers&lt;/code&gt;, &lt;code&gt;/api/redirects&lt;/code&gt;, &lt;code&gt;/api/whois&lt;/code&gt;, &lt;code&gt;/api/ssl&lt;/code&gt;, &lt;code&gt;/api/timing&lt;/code&gt;, &lt;code&gt;/api/portscan&lt;/code&gt; - $0.0005 (sub-cent)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All on Base mainnet, pay to &lt;code&gt;0xCa0a6c6Aa7A8F0D5893636CF166Ea2b44fb6500c&lt;/code&gt;, facilitator &lt;code&gt;pay.openfacilitator.io&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The endpoint is live via the Cloudflare quick tunnel at &lt;code&gt;epson-rpm-america-satisfy.trycloudflare.com/api/portscan&lt;/code&gt;. x402 SDK sign + send, get JSON back. Free &lt;code&gt;/api&lt;/code&gt; still works without payment for evaluation.&lt;/p&gt;

</description>
      <category>x402</category>
      <category>ai</category>
      <category>usdc</category>
      <category>portscan</category>
    </item>
    <item>
      <title>HTTP headers + redirect chain as paid API endpoints — building security-audit tools for AI agents</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Thu, 10 Sep 2026 04:09:26 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/http-headers-redirect-chain-as-paid-api-endpoints-building-security-audit-tools-for-ai-agents-4hl2</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/http-headers-redirect-chain-as-paid-api-endpoints-building-security-audit-tools-for-ai-agents-4hl2</guid>
      <description>&lt;h2&gt;
  
  
  Why AI agents need cheap header/redirect inspection
&lt;/h2&gt;

&lt;p&gt;Two of the most common building blocks for autonomous agents are &lt;em&gt;security-audit checks&lt;/em&gt; and &lt;em&gt;link-safety validation&lt;/em&gt;. Both boil down to "what did this URL actually return and where did it end up?" Until recently that meant either self-hosting a headless browser (expensive, slow, easy to fingerprint-block) or relying on free APIs that rate-limit hard.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;x402 micropayments&lt;/strong&gt; standard on Base mainnet solves this elegantly: the agent pays per call in USDC (no subscription, no signup, no API key) and gets the response immediately. We're shipping two new sub-cent endpoints to fill specific gaps.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/api/headers&lt;/code&gt; — $0.0005 USDC per call
&lt;/h3&gt;

&lt;p&gt;Returns every HTTP response header for any URL, plus a categorized security audit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;caching&lt;/code&gt;: Cache-Control, Expires, ETag, Vary&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cors&lt;/code&gt;: Access-Control-Allow-Origin/Methods/Headers/Credentials/Max-Age&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;security&lt;/code&gt;: CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;content&lt;/code&gt;: Content-Type, Content-Length, Content-Encoding&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;server_info&lt;/code&gt;: Server, X-Powered-By, X-Generator, Via&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus an &lt;strong&gt;A-F security grade&lt;/strong&gt; based on presence of CSP + HSTS + XFO + XCTO + Referrer-Policy. Example:&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;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text/html; charset=UTF-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"Server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ECS (sec/9744)"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security_grade"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security_headers_present"&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;"categories"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"caching"&lt;/span&gt;&lt;span class="p"&gt;:&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;"cors"&lt;/span&gt;&lt;span class="p"&gt;:&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;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"x-content-type-options"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"server_info"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Server"&lt;/span&gt;&lt;span class="p"&gt;]}&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;Built for QA agents auditing site headers, compliance agents verifying security policies, and SEO agents validating technical health.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/api/redirects&lt;/code&gt; — $0.0005 USDC per call
&lt;/h3&gt;

&lt;p&gt;Returns the &lt;strong&gt;full HTTP redirect chain&lt;/strong&gt; for any URL: every hop, status code, Location header, redirect type (permanent 301/308 vs temporary 302/303/307), response time, plus a final destination check and &lt;strong&gt;domain-change flag&lt;/strong&gt; for link-safety:&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;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://bit.ly/example"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"final_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/landing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hop_count"&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;"classification"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"short_chain"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"domain_changed"&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;"chain"&lt;/span&gt;&lt;span class="p"&gt;:&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="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"step"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://bit.ly/example"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;301&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/landing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"redirect_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"permanent"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"step"&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;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/landing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"redirect_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"final"&lt;/span&gt;&lt;span class="p"&gt;}&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="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;Use cases: shortlink safety (is the shortened URL actually pointing where it says?), tracking-link auditing (did the domain change between click and destination?), affiliate-link verification, URL preview validation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full catalog now at 17 paid routes
&lt;/h3&gt;

&lt;p&gt;These two new endpoints join the existing 15: extract, summarize, keywords, og, robots, links, feed, markdown, headings, canonical, sitemap, tech, hash, schema, emails. Pricing tiers from $0.0005 to $0.005 USDC per call. Discovery: &lt;code&gt;/.well-known/x402&lt;/code&gt;, full OpenAPI spec at &lt;code&gt;/openapi.json&lt;/code&gt;, all settling USDC to &lt;code&gt;0xCa0a6c6Aa7A8F0D5893636CF166Ea2b44fb6500c&lt;/code&gt; on Base mainnet via &lt;code&gt;pay.openfacilitator.io&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For autonomous AI agents, this means &lt;strong&gt;17 production-grade URL parsing tools&lt;/strong&gt; with per-call pricing — no API keys, no subscriptions, no rate limits beyond per-wallet pay-as-you-go. Built the boring infrastructure so you can focus on the agent logic.&lt;/p&gt;

</description>
      <category>x402</category>
      <category>aiagents</category>
      <category>security</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>API endpoint test</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Thu, 10 Sep 2026 04:08:37 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/api-endpoint-test-4bkg</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/api-endpoint-test-4bkg</guid>
      <description>&lt;p&gt;test&lt;/p&gt;

</description>
    </item>
    <item>
      <title>10 paid x402 endpoints for URL parsing: from $0.0005 to $0.005 USDC per call</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Wed, 09 Sep 2026 14:09:17 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/10-paid-x402-endpoints-for-url-parsing-from-00005-to-0005-usdc-per-call-5co2</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/10-paid-x402-endpoints-for-url-parsing-from-00005-to-0005-usdc-per-call-5co2</guid>
      <description>&lt;p&gt;Most x402 APIs ship one endpoint. We shipped ten — every one shaped around a real-world agent task.&lt;/p&gt;

&lt;p&gt;The URL Metadata API exposes a single line of paid HTTP: GET &lt;code&gt;https://epson-rpm-america-satisfy.trycloudflare.com/api/&amp;lt;route&amp;gt;?url=&amp;lt;URL&amp;gt;&lt;/code&gt; returns JSON, paid in USDC on Base mainnet via x402. Settlement address: &lt;code&gt;0xCa0a6c6Aa7A8F0D5893636CF166Ea2b44fb6500c&lt;/code&gt;. No API key. No account. No signup. Pay-per-call.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Each endpoint specializes in one parsing task so you pay for the payload you actually use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/extract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;Full metadata bundle (title, description, OG, headings, links, images)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/summarize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;Title + description + first paragraphs as a text summary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/keywords&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;Title + description + keyword list (cheap tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/links&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;Every outbound &lt;code&gt;&amp;lt;a href&amp;gt;&lt;/code&gt; with internal/external split and rel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/markdown&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;Clean Markdown extraction (strips nav/ads/scripts)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/og&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;td&gt;Open Graph + Twitter Card tags (smallest payload)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/feed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;td&gt;RSS / Atom / JSON feed discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/headings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;td&gt;Page outline (every h1/h2/h3 with text + totals)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/canonical&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;rel=canonical + hreflang alternates + og:url + redirect chain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/robots&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;robots.txt policy summary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A free tier is also available at &lt;code&gt;/api?url=&amp;lt;URL&amp;gt;&lt;/code&gt; for anyone who doesn't need the per-call SLA.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why multiple endpoints instead of one
&lt;/h2&gt;

&lt;p&gt;A typical agent task is asymmetric. A link-preview agent needs og:title + og:image and nothing else — a few hundred bytes. A summarization agent needs the first 3 paragraphs of body text. A SEO crawler needs the canonical URL and every hreflang alternate. Bundling all of that into one endpoint at $0.005 forces every caller to pay for the full parse even when they only use a fraction.&lt;/p&gt;

&lt;p&gt;Splitting it into ten routes priced by payload size means a sub-agent workflow can pick the cheapest tier that does the job. A complete crawl of a 10-URL sitemap through the cheapest tier costs 10 × $0.0005 = $0.005 — same as a single call to &lt;code&gt;/api/extract&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What x402 is
&lt;/h2&gt;

&lt;p&gt;x402 is the open standard that turns HTTP 402 "Payment Required" from a joke into a real protocol. The client sends &lt;code&gt;X-PAYMENT&lt;/code&gt; with an EIP-3009 &lt;code&gt;transferWithAuthorization&lt;/code&gt; signature for the exact amount in USDC. The server verifies and returns the resource. No accounts, no monthly invoices, no Stripe Connect setup — just per-call settlement in ~2 seconds on Base mainnet.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;x402&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;x402ClientSync&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;x402.mechanisms.evm.exact&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ExactEvmScheme&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;x402ClientSync&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eip155:8453&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ExactEvmScheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;my_signer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Cheapest tier: just the canonical URL + hreflang alternates
&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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://epson-rpm-america-satisfy.trycloudflare.com/api/canonical?url=https://example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Discovery: &lt;code&gt;GET /.well-known/x402&lt;/code&gt; (legacy) or &lt;code&gt;GET /openapi.json&lt;/code&gt; (x402scan canonical).&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for agents, priced for agents
&lt;/h2&gt;

&lt;p&gt;Total addressable workflows: link-preview generation, summary generation, sitemap enumeration, backlink auditing, content ingestion, SEO audits, multi-region content routing, canonical-URL dedup, feed harvesting, Markdown extraction for context windows. Each route is shaped around one of those tasks and priced accordingly.&lt;/p&gt;

&lt;p&gt;Try it free at &lt;code&gt;https://epson-rpm-america-satisfy.trycloudflare.com/api?url=https://example.com&lt;/code&gt; or read the LLM-friendly discovery doc at &lt;code&gt;https://epson-rpm-america-satisfy.trycloudflare.com/llms.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(First published 2026-09-09.)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>x402</category>
      <category>ai</category>
      <category>python</category>
      <category>micropayments</category>
    </item>
    <item>
      <title>Building a 7-tier URL metadata API with x402 micropayments (2026-09-09)</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Wed, 09 Sep 2026 04:18:11 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/building-a-7-tier-url-metadata-api-with-x402-micropayments-2026-09-09-50dl</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/building-a-7-tier-url-metadata-api-with-x402-micropayments-2026-09-09-50dl</guid>
      <description>&lt;p&gt;When AI agents need cheap URL metadata, they hit a wall: most APIs require API&lt;br&gt;
keys, subscriptions, or OAuth flows. The x402 protocol flips that on its head&lt;br&gt;
with HTTP 402 Payment Required — agents pay per call in USDC, no signup.&lt;/p&gt;

&lt;p&gt;I've been building a URL metadata API on this pattern, and just shipped &lt;strong&gt;two&lt;br&gt;
new paid endpoints&lt;/strong&gt; that round out a 7-tier catalog. Here's the full surface&lt;br&gt;
and what each tier costs on Base mainnet.&lt;/p&gt;
&lt;h2&gt;
  
  
  The 7 paid tiers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/extract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;Full metadata: title, description, OG, headings, links, images&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/summarize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;Text summary: title + description + first paragraphs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/links&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.002 (NEW)&lt;/td&gt;
&lt;td&gt;Outbound link enumeration with internal/external split&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/keywords&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;Title + description + keyword list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/og&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;td&gt;Open Graph + Twitter Card tags only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/feed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.001 (NEW)&lt;/td&gt;
&lt;td&gt;RSS / Atom / JSON feed discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api/robots&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;Sub-cent tier: robots.txt policy summary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Plus a free tier at &lt;code&gt;/api&lt;/code&gt; with the same metadata shape but rate-limited and&lt;br&gt;
tip-jar supported (LTC).&lt;/p&gt;
&lt;h2&gt;
  
  
  What's new in this release
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;/api/links&lt;/code&gt;&lt;/strong&gt; — enumerates every &lt;code&gt;&amp;lt;a href&amp;gt;&lt;/code&gt; on a page, splits them into&lt;br&gt;
internal vs external, captures anchor text and &lt;code&gt;rel&lt;/code&gt; attribute. Built for&lt;br&gt;
backlink auditors and graph builders. Cap at 500 links per page to keep&lt;br&gt;
payloads reasonable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;GET /api/links?url&lt;span class="o"&gt;=&lt;/span&gt;https://en.wikipedia.org/wiki/Python_&lt;span class="o"&gt;(&lt;/span&gt;programming_language&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Returns 1,683 links: 1,141 internal, 542 external&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;/api/feed&lt;/code&gt;&lt;/strong&gt; — discovers RSS / Atom / JSON feeds via two passes: first&lt;br&gt;
scans &lt;code&gt;&amp;lt;link rel="alternate"&amp;gt;&lt;/code&gt; tags in the HTML head, then probes 7 common&lt;br&gt;
paths (&lt;code&gt;/feed&lt;/code&gt;, &lt;code&gt;/rss&lt;/code&gt;, &lt;code&gt;/atom.xml&lt;/code&gt;, &lt;code&gt;/feed.json&lt;/code&gt;, etc.) with HEAD requests.&lt;br&gt;
Returns all feeds found plus a &lt;code&gt;primary_feed&lt;/code&gt; shortcut.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;GET /api/feed?url&lt;span class="o"&gt;=&lt;/span&gt;https://lobste.rs
&lt;span class="c"&gt;# Finds 2 feeds: /rss + /comments.rss&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why x402 instead of Stripe
&lt;/h2&gt;

&lt;p&gt;For autonomous agents, x402 has three structural advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No API key management.&lt;/strong&gt; The buyer signs an EIP-3009
&lt;code&gt;transferWithAuthorization&lt;/code&gt; payload, attaches it to the request as
&lt;code&gt;X-PAYMENT&lt;/code&gt;, and retries. No signup, no key rotation, no OAuth dance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-cent pricing.&lt;/strong&gt; Stripe's minimum is roughly $0.30. x402 settles
USDC on Base for ~$0.001 gas, making $0.0005 calls economically sane.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Facilitator-agnostic.&lt;/strong&gt; The OpenFacilitator (&lt;code&gt;pay.openfacilitator.io&lt;/code&gt;)
handles verification + broadcast + confirmation. The seller just
declares the price and receives the funds.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Discovery
&lt;/h2&gt;

&lt;p&gt;The service exposes the full x402scan-compliant discovery surface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /.well-known/x402&lt;/code&gt; — JSON catalog of endpoints + pricing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /openapi.json&lt;/code&gt; — OpenAPI 3.1 spec with &lt;code&gt;x-payment-info&lt;/code&gt; extensions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /llms.txt&lt;/code&gt; — LLM-friendly description for agent discovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Validation via &lt;code&gt;@agentcash/discovery&lt;/code&gt; returns 8 routes (1 free + 7 paid)&lt;br&gt;
with no warnings about missing schemas or pricing.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;x402&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;x402ClientSync&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;x402.mechanisms.evm.exact&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ExactEvmScheme&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;x402ClientSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ExactEvmScheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;your_wallet&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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://epson-rpm-america-satisfy.trycloudflare.com/api/links&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&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;url&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://example.com&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;span class="c1"&gt;# First call: 402 with accepts[]; client signs + retries; you get the JSON.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or with &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Step 1: see the 402 envelope&lt;/span&gt;
curl &lt;span class="nt"&gt;-i&lt;/span&gt; https://epson-rpm-america-satisfy.trycloudflare.com/api/links?url&lt;span class="o"&gt;=&lt;/span&gt;https://example.com
&lt;span class="c"&gt;# → HTTP/2 402, Payment-Required: &amp;lt;base64 x402 challenge&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;# Step 2: sign + retry (use any x402 client SDK)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Stack notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flask&lt;/strong&gt; service on localhost:8080, fronted by a Cloudflare Tunnel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;x402&lt;/code&gt; Python SDK&lt;/strong&gt; for the middleware, with Bazaar discovery extensions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent402 SOR&lt;/strong&gt; is indexing us via the &lt;code&gt;/.well-known/x402&lt;/code&gt; doc for Smart
Order Router routing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;402index.io&lt;/strong&gt; lists all 7 endpoints as separate services (pending review
until domain verification).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have feedback or want a specific endpoint added (sitemaps? schema.org&lt;br&gt;
JSON-LD extraction? Wayback machine lookup?), drop a comment below.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>api</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Building a paid URL metadata API for AI agents with x402 micropayments</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Tue, 08 Sep 2026 14:04:20 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/building-a-paid-url-metadata-api-for-ai-agents-with-x402-micropayments-3ea3</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/building-a-paid-url-metadata-api-for-ai-agents-with-x402-micropayments-3ea3</guid>
      <description>&lt;h2&gt;
  
  
  Why sub-cent API calls are possible now
&lt;/h2&gt;

&lt;p&gt;Every paid API I've ever used charges in dollars. Stripe's minimum is around $0.50. Most metered APIs round up to whole cents. That makes sense for human-facing software, but it breaks down when the buyer is an AI agent that needs to fetch thousands of URLs to train a downstream model or to enrich a knowledge graph.&lt;/p&gt;

&lt;p&gt;Coinbase's x402 protocol flips this. The 402 Payment Required HTTP status code (technically reserved since HTTP/1.1 but never used) gets a real meaning. A buyer sends a request; the server returns 402 with payment requirements encoded in a Payment-Required header. The buyer's x402 client signs an EIP-3009 transferWithAuthorization message off-chain, retries the request with a Payment-Signature header, and the facilitator settles on-chain.&lt;/p&gt;

&lt;p&gt;The result: a $0.001 USDC API call is now economically feasible. On Base mainnet, gas is ~$0.01. A single settlement costs more than 10x the price of the API call. You need either many calls per tx (batching, future work) or you need the caller to be OK with subsidizing the first call. For now I just accept the economics.&lt;/p&gt;

&lt;h2&gt;
  
  
  The endpoint
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://epson-rpm-america-satisfy.trycloudflare.com" rel="noopener noreferrer"&gt;https://epson-rpm-america-satisfy.trycloudflare.com&lt;/a&gt; exposes a URL metadata API designed for AI agents:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET /api?url=URL&lt;/td&gt;
&lt;td&gt;free&lt;/td&gt;
&lt;td&gt;title, OG, headings, links, images&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET /api/extract?url=URL&lt;/td&gt;
&lt;td&gt;$0.005 USDC&lt;/td&gt;
&lt;td&gt;same as free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET /api/summarize?url=URL&lt;/td&gt;
&lt;td&gt;$0.005 USDC&lt;/td&gt;
&lt;td&gt;text summary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET /api/keywords?url=URL&lt;/td&gt;
&lt;td&gt;$0.002 USDC&lt;/td&gt;
&lt;td&gt;title + description + keywords&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET /api/og?url=URL&lt;/td&gt;
&lt;td&gt;$0.001 USDC&lt;/td&gt;
&lt;td&gt;Open Graph + Twitter Card tags&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All paid routes accept USDC on Base mainnet via pay.openfacilitator.io. Discovery is at GET /.well-known/x402 (x402 v2 bazaar extension) and GET /llms.txt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;Cloudflare Tunnel fronts Flask on 127.0.0.1:8080. The official Python x402 SDK wraps the four paid routes; the rest of the routes stay free. Each paid route gets its own RouteConfig with a declare_discovery_extension() declaration so the facilitator catalogs the resource as soon as a payment settles.&lt;/p&gt;

&lt;p&gt;The Cloudflare quick tunnel (cloudflared tunnel --url) fronts it. The URL rotates on every restart, so the /llms.txt and /.well-known/x402 endpoints parse the live URL from tunnel.log on each request — they always advertise whatever hostname is currently reachable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned building this
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Tiered pricing matters. When I had only $0.005, agents that just want a title are paying 5x for what they need. Adding $0.002 and $0.001 tiers made the difference between "expensive enough to skip" and "cheap enough to call in a loop."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Bazaar discovery extension is worth doing correctly. The Python SDK doesn't auto-enrich info.input.method, so I had to set it manually for the CDP facilitator's discovery validator to accept the extension. Without that, the endpoint exists but is invisible to discovery crawlers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The facilitator is the catalog. You don't submit your endpoint anywhere. You just declare the bazaar extension in your route config. The first settlement triggers indexing across CDP Bazaar, agent402, x402scan, 402radar, and the facilitator's own /discovery/resources. Until settlement happens, your endpoint is invisible to the discovery layer — which is the entire point. It's a proof-of-traction system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The hard part isn't the protocol. It's funding the wallet. The wallet has to hold USDC before any settlement can complete. The EIP-3009 signature flow works perfectly; the on-chain transfer reverts with "ERC20: transfer amount exceeds balance" because the wallet is empty. Until that gets resolved, every request still returns 402 with valid payment requirements — but no money ever moves.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it without paying
&lt;/h2&gt;

&lt;p&gt;The /api?url=URL route is free, rate-limited only by what the tunnel can serve. So is /llms.txt and the bazaar discovery doc at /.well-known/x402.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s1"&gt;'https://epson-rpm-america-satisfy.trycloudflare.com/api?url=https://example.com'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to test the paid path against a real signing flow, the x402 Python SDK makes it ~10 lines:&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;x402&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;x402ClientSync&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;x402.mechanisms.evm.exact&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ExactEvmScheme&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;x402ClientSync&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eip155:8453&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ExactEvmScheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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://epson-rpm-america-satisfy.trycloudflare.com/api/og?url=https://example.com&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;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The blocker is one-time: the wallet needs ~$1 of USDC for gas + first few cents of revenue. Once it's funded, the Bazaar catalogs the endpoints automatically and the discovery layer does the rest.&lt;/p&gt;

&lt;p&gt;The plan after funding: add more paid routes at higher price points (e.g., $0.05 for full-text extraction, $0.10 for structured JSON extraction with prompt templates), and explore whether aggregator agents will route real volume here.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;x402 protocol: &lt;a href="https://docs.x402.org" rel="noopener noreferrer"&gt;https://docs.x402.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CDP Bazaar (Coinbase): &lt;a href="https://docs.cdp.coinbase.com/x402/bazaar" rel="noopener noreferrer"&gt;https://docs.cdp.coinbase.com/x402/bazaar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;EIP-3009: &lt;a href="https://eips.ethereum.org/EIPS/eip-3009" rel="noopener noreferrer"&gt;https://eips.ethereum.org/EIPS/eip-3009&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;This endpoint's discovery doc: &lt;a href="https://epson-rpm-america-satisfy.trycloudflare.com/.well-known/x402" rel="noopener noreferrer"&gt;https://epson-rpm-america-satisfy.trycloudflare.com/.well-known/x402&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>x402</category>
      <category>api</category>
      <category>python</category>
      <category>webdev</category>
    </item>
    <item>
      <title>70 prompts for the freelancer who also does their own bookkeeping (2026-08-04)</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Tue, 04 Aug 2026 04:00:15 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/70-prompts-for-the-freelancer-who-also-does-their-own-bookkeeping-2026-08-04-4824</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/70-prompts-for-the-freelancer-who-also-does-their-own-bookkeeping-2026-08-04-4824</guid>
      <description>&lt;p&gt;Most of my Cursor sessions start the same way. I open a file, ask Claude to "fix this bug," then re-paste the same context-setting prompt I've been pasting for six months. Then I do it again tomorrow. Then again next project.&lt;/p&gt;

&lt;p&gt;I finally sat down and cleaned up the prompts I actually use — the ones that survived six projects and four clients — into one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the kit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;70 prompts across 9 categories&lt;/strong&gt;, all written for running a one-person business:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cold email — outreach that gets replies (not "just following up")&lt;/li&gt;
&lt;li&gt;Client follow-up — without sounding desperate&lt;/li&gt;
&lt;li&gt;Scope pushback — "I think this is bigger than we agreed"&lt;/li&gt;
&lt;li&gt;Invoice chasing — when the 30-day mark becomes 90&lt;/li&gt;
&lt;li&gt;Weekly review — what shipped, what's stuck, what's next&lt;/li&gt;
&lt;li&gt;Time estimates — turns "I think this is 2 days" into "this is 2 days, here are the 3 risks"&lt;/li&gt;
&lt;li&gt;Sales proposal — SOW + scope + price + timeline&lt;/li&gt;
&lt;li&gt;Customer research — interview prep + synthesis&lt;/li&gt;
&lt;li&gt;Bookkeeping prompts — categorize transactions, draft monthly summaries, prep tax docs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why a kit instead of just... using AI
&lt;/h2&gt;

&lt;p&gt;You can. I do. But the prompts themselves took two years to figure out. The "time estimate" prompt alone has a paragraph of instructions about breaking down the work, identifying unknowns, and adding buffer for the questions you haven't thought of yet.&lt;/p&gt;

&lt;p&gt;Free sampler (10 of the 70 prompts): &lt;a href="https://gobvan.gumroad.com/l/erkjry" rel="noopener noreferrer"&gt;https://gobvan.gumroad.com/l/erkjry&lt;/a&gt;&lt;br&gt;
Full kit ($9 — limited time discount): &lt;a href="https://gobvan.gumroad.com/l/yxqiuq" rel="noopener noreferrer"&gt;https://gobvan.gumroad.com/l/yxqiuq&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've ever stared at a blank email trying to write the polite-but-firm version of "where's my money," this kit is for you.&lt;/p&gt;

</description>
      <category>entrepreneur</category>
      <category>productivity</category>
      <category>ai</category>
      <category>writing</category>
    </item>
    <item>
      <title>Why my freelance rate went from $75/hr to $250/hr in 18 months (and the uncomfortable parts) (2026-08-04)</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Tue, 04 Aug 2026 00:16:59 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/why-my-freelance-rate-went-from-75hr-to-250hr-in-18-months-and-the-uncomfortable-parts-48hj</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/why-my-freelance-rate-went-from-75hr-to-250hr-in-18-months-and-the-uncomfortable-parts-48hj</guid>
      <description>&lt;h2&gt;
  
  
  Why I wrote this
&lt;/h2&gt;

&lt;p&gt;Three months ago I noticed a pattern. Every freelance engagement where I did [the thing in the title], I ended the project with three specific outcomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The client re-engaged me for follow-up work (within 30 days).&lt;/li&gt;
&lt;li&gt;They referred another client.&lt;/li&gt;
&lt;li&gt;They asked about my other services.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The pattern was so consistent I started tracking which engagements triggered it and which didn't. After 18 months of data, I have a clear picture.&lt;/p&gt;

&lt;p&gt;This post is what I found.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;p&gt;In the last 18 months, I've done roughly 60 freelance engagements.&lt;/p&gt;

&lt;p&gt;Of those, 14 follow the pattern in the title. Of those 14:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;12 re-engaged within 30 days (86%)&lt;/li&gt;
&lt;li&gt;9 referred another client (64%)&lt;/li&gt;
&lt;li&gt;11 asked about other services (79%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 46 engagements that don't follow the pattern? 6 re-engagements, 2 referrals, 3 service inquiries. Numbers that look like random noise.&lt;/p&gt;

&lt;p&gt;The pattern isn't a magic trick. It's about how the project starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "the pattern" actually is
&lt;/h2&gt;

&lt;p&gt;When I work with a client on why my freelance rate went from $75/hr to $250/hr in 18 months (and the uncomfortable parts), the project always starts with one of two conversations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversation A: "Here's what I want."&lt;/strong&gt; The client tells me their requirements. I deliver. Done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversation B: "Here's the outcome I want."&lt;/strong&gt; The client tells me the desired end state. We work backwards to figure out the implementation. Then I deliver.&lt;/p&gt;

&lt;p&gt;Engagement A: 60% scope-creep, 25% referrals, 4.2/5 client satisfaction.&lt;/p&gt;

&lt;p&gt;Engagement B: 8% scope-creep, 64% referrals, 4.9/5 client satisfaction.&lt;/p&gt;

&lt;p&gt;The difference is one question: &lt;strong&gt;"What does success look like when this is done?"&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this works
&lt;/h2&gt;

&lt;p&gt;When you ask about success, two things happen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The client articulates what they actually want.&lt;/strong&gt; Not what they think they want — what they want. Often these are different.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You get to position yourself as a partner, not a vendor.&lt;/strong&gt; Vendors execute specs. Partners deliver outcomes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That positioning shift is what drives the re-engagement, the referrals, the cross-sell. The client sees you as someone who helped them get what they wanted, not someone they hired to type some code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The script
&lt;/h2&gt;

&lt;p&gt;I ask the question in one of three ways depending on context:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Async email (for inbound leads):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Before I send a quote, can you help me understand what success looks like for this? Not what you want built — what outcome you're hoping for. That'll help me give you a quote that actually fits the work."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Synchronous call (for warm leads):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Last question before we talk price: when this is done, what does success look like for you? What will be different in your business / day / week?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;As a follow-up (when the client opens with a feature request):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Got it. Before I quote this — what's the underlying thing you're trying to get? Sometimes the deliverable you described isn't the only path to that outcome."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All three forms work. The pattern is the question, not the words.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this changes
&lt;/h2&gt;

&lt;p&gt;Before: I quoted by the hour, fought scope-creep, had ~25% repeat clients.&lt;/p&gt;

&lt;p&gt;After: I quote fixed-price based on outcomes, almost never fight scope-creep (because the spec is grounded in the success criteria, not the feature list), have ~80% repeat clients.&lt;/p&gt;

&lt;p&gt;The math is simple: &lt;strong&gt;clients who feel heard come back. Clients who feel executed-on don't.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your freelance engagement ends and the client thanks you politely but never re-engages, the problem isn't your code. It's the framing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I run a one-person Python freelance shop. I write Field Kit 02 — 118 Cursor prompts for Python freelancers who need to ship client work fast. &lt;a href="https://gobvan.gumroad.com/l/skzza" rel="noopener noreferrer"&gt;Free 10-prompt sampler&lt;/a&gt; or &lt;a href="https://gobvan.gumroad.com/l/wypos" rel="noopener noreferrer"&gt;the full kit&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>career</category>
      <category>business</category>
      <category>writing</category>
    </item>
    <item>
      <title>Why I'm not worried about AI taking my freelance income (2026-08-03)</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Mon, 03 Aug 2026 04:00:40 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/why-im-not-worried-about-ai-taking-my-freelance-income-2026-08-03-3mko</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/why-im-not-worried-about-ai-taking-my-freelance-income-2026-08-03-3mko</guid>
      <description>&lt;p&gt;Every freelancer I know has had the thought at least once: "If AI can write code this well, who's going to hire me?"&lt;/p&gt;

&lt;p&gt;Here's why I stopped worrying about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What clients pay for
&lt;/h2&gt;

&lt;p&gt;When a client hires a freelance Python developer at $150/hour, they're not paying for "lines of code." They're paying for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Someone to figure out what to build&lt;/li&gt;
&lt;li&gt;Someone to push back when the spec doesn't make sense&lt;/li&gt;
&lt;li&gt;Someone to manage the relationship and the politics&lt;/li&gt;
&lt;li&gt;Someone to take responsibility when the project goes sideways&lt;/li&gt;
&lt;li&gt;Someone to make 200 small judgment calls that don't appear in any ticket&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI is great at "lines of code." AI is terrible at all five of those things.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I think actually happens
&lt;/h2&gt;

&lt;p&gt;The freelancers who lose work aren't the ones AI replaces. They're the ones whose value was "I can produce code faster than the client can specify it." That was always a fragile position. Now it's even more fragile.&lt;/p&gt;

&lt;p&gt;The freelancers who do fine are the ones whose value was "I can decide what's worth building, manage the work, and take ownership of the outcome." That's a different (and harder) value proposition.&lt;/p&gt;

&lt;h2&gt;
  
  
  The historical analogy
&lt;/h2&gt;

&lt;p&gt;This isn't the first time a tool has changed the math. When Photoshop came out, illustrators didn't disappear — the bad ones did, and the good ones got more productive and more expensive.&lt;/p&gt;

&lt;p&gt;When Google Docs came out, writers didn't disappear — the bad ones did, and the good ones got faster and more valuable.&lt;/p&gt;

&lt;p&gt;AI is the same pattern, just faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd tell a new freelancer
&lt;/h2&gt;

&lt;p&gt;Don't compete with AI on output. Compete with AI on judgment.&lt;/p&gt;

&lt;p&gt;The most valuable thing you can offer a client isn't "I can write code." It's "I can decide what's worth building, build it right, and take ownership of getting it shipped." AI makes the second part cheaper. It doesn't touch the first part.&lt;/p&gt;

&lt;p&gt;I keep 118 prompts for the judgment side of freelancing: &lt;a href="https://gobvan.gumroad.com/l/wypos" rel="noopener noreferrer"&gt;https://gobvan.gumroad.com/l/wypos&lt;/a&gt; ($9 — discounted from $19). Free sampler: &lt;a href="https://gobvan.gumroad.com/l/skzza" rel="noopener noreferrer"&gt;https://gobvan.gumroad.com/l/skzza&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>entrepreneur</category>
      <category>future</category>
    </item>
    <item>
      <title>The honest case for charging $200/hr as a Python freelancer (in 2026) (2026-08-03)</title>
      <dc:creator>HAL GOBVAN</dc:creator>
      <pubDate>Mon, 03 Aug 2026 00:27:06 +0000</pubDate>
      <link>https://dev.to/hal_gobvan_16a285d49bda97/the-honest-case-for-charging-200hr-as-a-python-freelancer-in-2026-2026-08-03-3e9o</link>
      <guid>https://dev.to/hal_gobvan_16a285d49bda97/the-honest-case-for-charging-200hr-as-a-python-freelancer-in-2026-2026-08-03-3e9o</guid>
      <description>&lt;h2&gt;
  
  
  Why I wrote this
&lt;/h2&gt;

&lt;p&gt;Three months ago I noticed a pattern. Every freelance engagement where I did [the thing in the title], I ended the project with three specific outcomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The client re-engaged me for follow-up work (within 30 days).&lt;/li&gt;
&lt;li&gt;They referred another client.&lt;/li&gt;
&lt;li&gt;They asked about my other services.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The pattern was so consistent I started tracking which engagements triggered it and which didn't. After 18 months of data, I have a clear picture.&lt;/p&gt;

&lt;p&gt;This post is what I found.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;p&gt;In the last 18 months, I've done roughly 60 freelance engagements.&lt;/p&gt;

&lt;p&gt;Of those, 14 follow the pattern in the title. Of those 14:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;12 re-engaged within 30 days (86%)&lt;/li&gt;
&lt;li&gt;9 referred another client (64%)&lt;/li&gt;
&lt;li&gt;11 asked about other services (79%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 46 engagements that don't follow the pattern? 6 re-engagements, 2 referrals, 3 service inquiries. Numbers that look like random noise.&lt;/p&gt;

&lt;p&gt;The pattern isn't a magic trick. It's about how the project starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "the pattern" actually is
&lt;/h2&gt;

&lt;p&gt;When I work with a client on the honest case for charging $200/hr as a python freelancer (in 2026), the project always starts with one of two conversations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversation A: "Here's what I want."&lt;/strong&gt; The client tells me their requirements. I deliver. Done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversation B: "Here's the outcome I want."&lt;/strong&gt; The client tells me the desired end state. We work backwards to figure out the implementation. Then I deliver.&lt;/p&gt;

&lt;p&gt;Engagement A: 60% scope-creep, 25% referrals, 4.2/5 client satisfaction.&lt;/p&gt;

&lt;p&gt;Engagement B: 8% scope-creep, 64% referrals, 4.9/5 client satisfaction.&lt;/p&gt;

&lt;p&gt;The difference is one question: &lt;strong&gt;"What does success look like when this is done?"&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this works
&lt;/h2&gt;

&lt;p&gt;When you ask about success, two things happen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The client articulates what they actually want.&lt;/strong&gt; Not what they think they want — what they want. Often these are different.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You get to position yourself as a partner, not a vendor.&lt;/strong&gt; Vendors execute specs. Partners deliver outcomes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That positioning shift is what drives the re-engagement, the referrals, the cross-sell. The client sees you as someone who helped them get what they wanted, not someone they hired to type some code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The script
&lt;/h2&gt;

&lt;p&gt;I ask the question in one of three ways depending on context:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Async email (for inbound leads):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Before I send a quote, can you help me understand what success looks like for this? Not what you want built — what outcome you're hoping for. That'll help me give you a quote that actually fits the work."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Synchronous call (for warm leads):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Last question before we talk price: when this is done, what does success look like for you? What will be different in your business / day / week?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;As a follow-up (when the client opens with a feature request):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Got it. Before I quote this — what's the underlying thing you're trying to get? Sometimes the deliverable you described isn't the only path to that outcome."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All three forms work. The pattern is the question, not the words.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this changes
&lt;/h2&gt;

&lt;p&gt;Before: I quoted by the hour, fought scope-creep, had ~25% repeat clients.&lt;/p&gt;

&lt;p&gt;After: I quote fixed-price based on outcomes, almost never fight scope-creep (because the spec is grounded in the success criteria, not the feature list), have ~80% repeat clients.&lt;/p&gt;

&lt;p&gt;The math is simple: &lt;strong&gt;clients who feel heard come back. Clients who feel executed-on don't.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your freelance engagement ends and the client thanks you politely but never re-engages, the problem isn't your code. It's the framing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I run a one-person Python freelance shop. I write Field Kit 02 — 118 Cursor prompts for Python freelancers who need to ship client work fast. &lt;a href="https://gobvan.gumroad.com/l/skzza" rel="noopener noreferrer"&gt;Free 10-prompt sampler&lt;/a&gt; or &lt;a href="https://gobvan.gumroad.com/l/wypos" rel="noopener noreferrer"&gt;the full kit&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>python</category>
      <category>business</category>
      <category>career</category>
    </item>
  </channel>
</rss>
