The problem with crypto fee data
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.
Neither is useful if you're building a product that needs structured fee data.
We built Augea to solve this. The Route Viability API gives you structured fee data across 33 exchanges, 10 countries, and 2 payment rails — with one rule: if we don't know something, we say so explicitly.
What the API returns
One endpoint. Three parameters. Every exchange in the catalog.
curl -H "Authorization: Bearer YOUR_KEY" \
"https://augea.io/api/agent/route-viability?country=DE&asset=BTC&rail=card"
The response includes every tracked exchange — not just the ones with data. Each entry has a viabilityState:
-
rankable— verified fee data exists. Fee range included. -
tracking— we have a snapshot row but not enough data to rank it yet. -
no_data— exchange is in our catalog but we have nothing for this route.
{
"exchangeSlug": "coinbase",
"viabilityState": "rankable",
"feeRange": { "low": 1.49, "high": 3.99 },
"freshnessBucket": "FRESH",
"capturedAt": "2025-03-17T10:00:00.000Z",
"unknownReason": null
}
{
"exchangeSlug": "robinhood",
"viabilityState": "no_data",
"feeRange": null,
"freshnessBucket": null,
"unknownReason": "No snapshot data for this route"
}
No filtering. No hiding. The second response is just as valid as the first — it tells you exactly what we don't know.
Why "unknown" is a first-class state
Every response carries a provenance.audit block:
{
"audit": {
"noInference": true,
"unknownsFirstClass": true,
"contractVersion": "v1"
}
}
noInference: true means we never fabricate data. If the evidence pipeline didn't produce a fee range, the field is null — not estimated, not interpolated.
unknownsFirstClass: true means a tracking or no_data 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."
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.
Freshness buckets
Fee data gets stale. We don't hide that — every entry has a freshnessBucket:
| Bucket | Age | What it means |
|---|---|---|
FRESH |
< 7 days | Recent evidence |
DEGRADED |
7–30 days | Usable but aging |
STALE |
30–90 days | May not reflect current pricing |
UNRANKABLE |
> 90 days | Too old for cost comparison |
Your product decides what to do with this. We just tell you how old the data is.
Route summary
Each response includes a routeSummary so you can quickly check coverage depth:
{
"totalExchangeCount": 33,
"rankableCount": 9,
"trackingCount": 4,
"noDataCount": 20,
"hasViableRoute": true
}
hasViableRoute is true when at least one exchange is rankable — meaning cost comparison is possible. It's not a recommendation. It's a coverage signal.
What the API explicitly won't do
The response includes a responseGuidance block:
{
"allowedUses": [
"Determine whether a route is covered by Augea data",
"List which exchanges have verifiable cost data for a route",
"Surface fee range estimates alongside freshness and provenance"
],
"forbiddenUses": [
"Recommend or rank exchanges as 'best' or 'safest'",
"Present fee ranges as guaranteed quotes",
"Infer exchange quality or safety from viability state"
]
}
We ship this in the response itself — not just in the docs — so downstream consumers always have the boundary visible.
Coverage
Currently in beta:
- 10 countries: US, GB, DE, SE, CA, AU, FR, NL, SG, PL
- 18 assets: BTC, ETH, SOL, XRP, ADA, DOGE, AVAX, LINK, DOT, MATIC, LTC, BCH, PEPE, SHIB, UNI, TAO, XLM, ATOM
- 2 rails: card (credit/debit), bank (bank transfer)
- 33 exchanges tracked across these markets
Not every exchange supports every combination. The API tells you which ones do.
Auth and rate limits
Bearer token authentication. Keys are provisioned manually during beta.
Authorization: Bearer <your-api-key>
Rate limit: 60 requests per minute per key. On 429, you get a Retry-After header.
Errors are structured and versioned:
{
"version": "augea-route-viability.v1",
"ok": false,
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 42 seconds."
}
}
Contract stability
The response version is augea-route-viability.v1. Within v1:
- New fields may be added
- Existing fields will not be removed or renamed
- Your code should tolerate unknown fields
This is an additive-only contract. No silent breaking changes.
Get a beta key
The API is free during beta. No billing, no commitment.
Email api@augea.io with:
- What you're building
- Which markets you need
- Expected query volume
Full docs: augea.io/docs/api/route-viability
Augea is a crypto fee comparison and route intelligence product. We track 33 exchanges across 10 countries with evidence-first methodology. Estimates, not quotes.
Top comments (0)