<?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: Per</title>
    <description>The latest articles on DEV Community by Per (@augea).</description>
    <link>https://dev.to/augea</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%2F3862279%2F4b2ee646-2c4f-4d9b-8596-6f771dcb6b88.png</url>
      <title>DEV Community: Per</title>
      <link>https://dev.to/augea</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/augea"/>
    <language>en</language>
    <item>
      <title>We built a crypto fee API that tells you what it doesn't know</title>
      <dc:creator>Per</dc:creator>
      <pubDate>Sun, 05 Apr 2026 13:20:50 +0000</pubDate>
      <link>https://dev.to/augea/we-built-a-crypto-fee-api-that-tells-you-what-it-doesnt-know-m82</link>
      <guid>https://dev.to/augea/we-built-a-crypto-fee-api-that-tells-you-what-it-doesnt-know-m82</guid>
      <description>&lt;p&gt;The problem with crypto fee data&lt;/p&gt;

&lt;p&gt;If you've tried to answer "what does it cost to buy BTC with a card in Germany?" programmatically, you've probably hit this: most comparison sites either show stale affiliate-ranked lists, or return nothing when they don't have data.&lt;/p&gt;

&lt;p&gt;Neither is useful if you're building a product that needs structured fee data.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://augea.io" rel="noopener noreferrer"&gt;Augea&lt;/a&gt; to solve this. The Route Viability API gives you structured fee data across 33 exchanges, 10 countries, and 2 payment rails — with one rule: &lt;strong&gt;if we don't know something, we say so explicitly.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the API returns
&lt;/h2&gt;

&lt;p&gt;One endpoint. Three parameters. Every exchange in the catalog.&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="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://augea.io/api/agent/route-viability?country=DE&amp;amp;asset=BTC&amp;amp;rail=card"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response includes &lt;strong&gt;every tracked exchange&lt;/strong&gt; — not just the ones with data. Each entry has a &lt;code&gt;viabilityState&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rankable&lt;/code&gt;&lt;/strong&gt; — verified fee data exists. Fee range included.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;tracking&lt;/code&gt;&lt;/strong&gt; — we have a snapshot row but not enough data to rank it yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;no_data&lt;/code&gt;&lt;/strong&gt; — exchange is in our catalog but we have nothing for this route.
&lt;/li&gt;
&lt;/ul&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;"exchangeSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"coinbase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"viabilityState"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rankable"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"feeRange"&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;"low"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.49&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.99&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;"freshnessBucket"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FRESH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"capturedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-03-17T10:00:00.000Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"unknownReason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&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;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;"exchangeSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"robinhood"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"viabilityState"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"no_data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"feeRange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"freshnessBucket"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"unknownReason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"No snapshot data for this route"&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;No filtering. No hiding. The second response is just as valid as the first — it tells you exactly what we don't know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "unknown" is a first-class state
&lt;/h2&gt;

&lt;p&gt;Every response carries a &lt;code&gt;provenance.audit&lt;/code&gt; block:&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;"audit"&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;"noInference"&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;"unknownsFirstClass"&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;"contractVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v1"&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;&lt;strong&gt;&lt;code&gt;noInference: true&lt;/code&gt;&lt;/strong&gt; means we never fabricate data. If the evidence pipeline didn't produce a fee range, the field is &lt;code&gt;null&lt;/code&gt; — not estimated, not interpolated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;unknownsFirstClass: true&lt;/code&gt;&lt;/strong&gt; means a &lt;code&gt;tracking&lt;/code&gt; or &lt;code&gt;no_data&lt;/code&gt; state is a deliberate response, not an error. Your code should handle it as valid information: "Augea tracks this exchange but doesn't have fee data for this route yet."&lt;/p&gt;

&lt;p&gt;This matters because most downstream products need to distinguish between "this route costs X" and "we don't know what this route costs" — and they need that distinction to be machine-readable, not buried in a footnote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Freshness buckets
&lt;/h2&gt;

&lt;p&gt;Fee data gets stale. We don't hide that — every entry has a &lt;code&gt;freshnessBucket&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bucket&lt;/th&gt;
&lt;th&gt;Age&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FRESH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;lt; 7 days&lt;/td&gt;
&lt;td&gt;Recent evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEGRADED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7–30 days&lt;/td&gt;
&lt;td&gt;Usable but aging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;STALE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;30–90 days&lt;/td&gt;
&lt;td&gt;May not reflect current pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UNRANKABLE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt; 90 days&lt;/td&gt;
&lt;td&gt;Too old for cost comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Your product decides what to do with this. We just tell you how old the data is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Route summary
&lt;/h2&gt;

&lt;p&gt;Each response includes a &lt;code&gt;routeSummary&lt;/code&gt; so you can quickly check coverage depth:&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;"totalExchangeCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rankableCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trackingCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"noDataCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hasViableRoute"&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="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;&lt;code&gt;hasViableRoute&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt; when at least one exchange is rankable — meaning cost comparison is possible. It's not a recommendation. It's a coverage signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the API explicitly won't do
&lt;/h2&gt;

&lt;p&gt;The response includes a &lt;code&gt;responseGuidance&lt;/code&gt; block:&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;"allowedUses"&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="s2"&gt;"Determine whether a route is covered by Augea data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"List which exchanges have verifiable cost data for a route"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Surface fee range estimates alongside freshness and provenance"&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;"forbiddenUses"&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="s2"&gt;"Recommend or rank exchanges as 'best' or 'safest'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Present fee ranges as guaranteed quotes"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Infer exchange quality or safety from viability state"&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;We ship this in the response itself — not just in the docs — so downstream consumers always have the boundary visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coverage
&lt;/h2&gt;

&lt;p&gt;Currently in beta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10 countries:&lt;/strong&gt; US, GB, DE, SE, CA, AU, FR, NL, SG, PL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;18 assets:&lt;/strong&gt; BTC, ETH, SOL, XRP, ADA, DOGE, AVAX, LINK, DOT, MATIC, LTC, BCH, PEPE, SHIB, UNI, TAO, XLM, ATOM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2 rails:&lt;/strong&gt; card (credit/debit), bank (bank transfer)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;33 exchanges&lt;/strong&gt; tracked across these markets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not every exchange supports every combination. The API tells you which ones do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auth and rate limits
&lt;/h2&gt;

&lt;p&gt;Bearer token authentication. Keys are provisioned manually during beta.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Bearer &amp;lt;your-api-key&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rate limit: 60 requests per minute per key. On &lt;code&gt;429&lt;/code&gt;, you get a &lt;code&gt;Retry-After&lt;/code&gt; header.&lt;/p&gt;

&lt;p&gt;Errors are structured and versioned:&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;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"augea-route-viability.v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RATE_LIMITED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rate limit exceeded. Retry after 42 seconds."&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;h2&gt;
  
  
  Contract stability
&lt;/h2&gt;

&lt;p&gt;The response version is &lt;code&gt;augea-route-viability.v1&lt;/code&gt;. Within v1:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New fields may be added&lt;/li&gt;
&lt;li&gt;Existing fields will not be removed or renamed&lt;/li&gt;
&lt;li&gt;Your code should tolerate unknown fields&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is an additive-only contract. No silent breaking changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get a beta key
&lt;/h2&gt;

&lt;p&gt;The API is free during beta. No billing, no commitment.&lt;/p&gt;

&lt;p&gt;Email &lt;strong&gt;&lt;a href="mailto:api@augea.io"&gt;api@augea.io&lt;/a&gt;&lt;/strong&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What you're building&lt;/li&gt;
&lt;li&gt;Which markets you need&lt;/li&gt;
&lt;li&gt;Expected query volume&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full docs: &lt;a href="https://augea.io/docs/api/route-viability" rel="noopener noreferrer"&gt;augea.io/docs/api/route-viability&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Augea is a crypto fee comparison and route intelligence product. We track 33 exchanges across 10 countries with evidence-first methodology. Estimates, not quotes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>cryptocurrency</category>
      <category>fintech</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
