Route Viability API
v1 beta · augea-route-viability.v1
Who this API is for
The Route Viability API is designed for teams that need structured, evidence-based crypto fee data — not opinions or recommendations.
Fintech product teams
Building comparison features, cost calculators, or route selectors that need fee data across exchanges and markets.
Research and media
Sourcing structured fee data for editorial, analysis, or market reports with verifiable provenance.
Financial advisors and platforms
Incorporating crypto cost context into advisory tools or portfolio platforms.
Compliance and operations
Auditing exchange cost structures or monitoring fee changes across markets and payment methods.
What you can build with it
- Exchange comparison widgets — embed fee range data for a specific country and payment method, with freshness timestamps and provenance
- Route coverage checks — determine whether a country/asset/rail combination has verified cost data before showing it to users
- Fee monitoring dashboards — poll periodically to track how exchange fee ranges change over time for specific routes
- Data quality audits — use freshness buckets and verification levels to assess data reliability before incorporating into downstream systems
The API returns structured data with explicit provenance. How you present it to your users is your decision — Augea does not control downstream display or interpretation.
Evaluate the API
During beta, you can evaluate the API before committing to integration:
- Request a beta key — email
api@augea.iowith your use case and target markets - Test with real queries — try the markets you care about and inspect response quality, freshness, and coverage depth
- Check coverage fit — verify that the countries, assets, and rails you need are covered, and that enough exchanges are rankable for your use case
- Review provenance — every response includes snapshot IDs, capture timestamps, and freshness buckets so you can assess data age and reliability
There is no commitment required during beta. No billing, no minimum volume, no lock-in.
Quick start
Try it with a single request. Replace YOUR_KEY with your beta API key.
curl -H "Authorization: Bearer YOUR_KEY" \ "https://augea.io/api/agent/route-viability?country=US&asset=BTC&rail=card"
Returns a JSON response with every exchange in the catalog, their viability state, fee ranges where available, freshness buckets, and snapshot provenance. No API key yet? Contact api@augea.io to request beta access.
What this API does
Given a country, asset, and payment rail, the Route Viability API returns which exchanges in Augea's catalog have coverage for that route — and what the coverage quality looks like.
Every exchange in the catalog appears in the response. Each entry carries a viabilityState that reflects how much Augea knows about that exchange on this route: fee data verified and rankable, a snapshot row present but incomplete, or no data at all. Unknown is a valid first-class state — not an error.
What this API is good for
- Checking whether a country × asset × rail route has verified coverage in Augea data
- Listing which exchanges have fee data for a route, and how fresh that data is
- Getting fee range estimates with explicit provenance (snapshot ID, capture timestamp, freshness bucket)
- Identifying data gaps: exchanges tracked but not yet rankable, exchanges with no data at all
What this API will not tell you
- Which exchange to use — this API does not recommend, rank by preference, or suggest a "best" option
- Live or guaranteed fee quotes — fee ranges are observational estimates from Augea's evidence pipeline, not real-time quotes from exchange APIs
- Exchange safety, trustworthiness, or regulatory status — those are outside the scope of route viability
- Fields beyond v1 — this contract is additive-only and will not silently drop fields
Authentication
All requests require a bearer token in the Authorization header.
Authorization: Bearer <your-api-key>
API keys are provisioned manually during the beta period. A missing or invalid key returns 401 UNAUTHORIZED. A disabled key returns the same 401 — no information is leaked about whether a key exists but is disabled versus never existed.
Endpoint
GET /api/agent/route-viability
| Parameter | Required | Description |
|---|---|---|
| country | string | ISO 3166-1 alpha-2 country code, uppercase. Example: US, GB, DE. |
| asset | string | Asset symbol, uppercase, 2–6 characters. Example: BTC, ETH. |
| rail | string | Payment rail. One of: "card" (credit/debit card), "bank" (bank transfer). |
All three parameters are required. Missing or invalid params return 400 INVALID_REQUEST.
Example request
curl "https://augea.io/api/agent/route-viability?country=US&asset=BTC&rail=card" \ -H "Authorization: Bearer <your-api-key>"
Success response (200)
Returns 200 with a RouteViabilityResponseV1 body. Abbreviated example (actual response includes all tracked exchanges):
{
"version": "augea-route-viability.v1",
"generatedAt": "2025-03-17T20:00:00.000Z",
"request": { "country": "US", "asset": "BTC", "rail": "card" },
"routeSummary": {
"totalExchangeCount": 16,
"rankableCount": 9,
"trackingCount": 4,
"noDataCount": 3,
"hasViableRoute": true
},
"exchanges": [
{
"exchangeSlug": "coinbase",
"exchangeName": "Coinbase",
"viabilityState": "rankable",
"rankable": true,
"feeRange": { "low": 1.49, "high": 3.99 },
"freshnessBucket": "FRESH",
"snapshotId": "1234",
"capturedAt": "2025-03-17T10:00:00.000Z",
"verificationLevel": "script_verified",
"unknownReason": null
},
{
"exchangeSlug": "gemini",
"exchangeName": "Gemini",
"viabilityState": "tracking",
"rankable": false,
"feeRange": null,
"freshnessBucket": "DEGRADED",
"snapshotId": "1234",
"capturedAt": "2025-03-10T10:00:00.000Z",
"verificationLevel": "partial",
"unknownReason": "Snapshot present but fee data insufficient for ranking"
},
{
"exchangeSlug": "robinhood",
"exchangeName": "Robinhood",
"viabilityState": "no_data",
"rankable": false,
"feeRange": null,
"freshnessBucket": null,
"snapshotId": null,
"capturedAt": null,
"verificationLevel": null,
"unknownReason": "No snapshot data for this route"
}
],
"provenance": {
"snapshotId": "1234",
"snapshotCreatedAt": "2025-03-17T18:00:00.000Z",
"freshnessBucket": "FRESH",
"audit": {
"noInference": true,
"unknownsFirstClass": true,
"contractVersion": "v1"
}
},
"responseGuidance": {
"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"
]
}
}Error responses
401 — Missing or invalid API key
{
"version": "augea-route-viability.v1",
"ok": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Valid API key required. Provide: Authorization: Bearer <key>"
}
}429 — Rate limit exceeded
The response includes a Retry-After header with the number of seconds until the window resets.
HTTP/2 429
Retry-After: 42
{
"version": "augea-route-viability.v1",
"ok": false,
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 42 seconds."
}
}400 — Invalid request
{
"version": "augea-route-viability.v1",
"ok": false,
"error": {
"code": "INVALID_REQUEST",
"message": "rail must be one of: card, bank"
}
}404 UNSUPPORTED_SCENARIO — the country/asset/rail combination is not supported by Augea's data pipeline.
500 INTERNAL_CONTRACT_ERROR — unexpected server error.
Per-exchange entry fields (exchanges[])
Every exchange in Augea's catalog appears in the exchanges array — including those with no data. The array is not filtered.
| Field | Type | Description |
|---|---|---|
| exchangeSlug | string | Stable lowercase identifier for the exchange (e.g. coinbase, kraken). |
| exchangeName | string | Human-readable exchange name. |
| viabilityState | "rankable" | "tracking" | "no_data" | rankable — fee data verified and eligible for cost comparison. tracking — snapshot row exists but insufficient data for ranking. no_data — exchange is in the catalog but has no snapshot row for this route. |
| rankable | boolean | Boolean mirror of viabilityState === "rankable". Provided for consumer convenience. |
| feeRange | { low, high } | null | Fee percent range from evidence. low and high are percentages (e.g. 1.49 = 1.49%). Null for tracking and no_data states. These are observational estimates from Augea's data pipeline — not live quotes from exchange APIs. |
| freshnessBucket | string | null | FRESH (<7d), DEGRADED (7–30d), STALE (30–90d), UNRANKABLE (>90d), NO_TIMESTAMP, UNKNOWN. Null for no_data entries. |
| snapshotId | string | null | ID of the RankingSnapshot that produced this row. Null for no_data. |
| capturedAt | ISO 8601 UTC | null | Timestamp when evidence was captured. Null for no_data. |
| verificationLevel | string | null | Verification level from Augea's evidence pipeline. Null for no_data. |
| unknownReason | string | null | Human-readable reason why an exchange is not rankable. Null for rankable exchanges. |
Route summary fields (routeSummary)
| Field | Type | Description |
|---|---|---|
| totalExchangeCount | number | Total exchanges in the catalog evaluated for this route. |
| rankableCount | number | Exchanges with fee data verified and eligible for cost comparison. |
| trackingCount | number | Exchanges present in snapshot but without sufficient cost data. |
| noDataCount | number | Exchanges in catalog with no snapshot row for this route. |
| hasViableRoute | boolean | True if at least one exchange is rankable. Indicates that cost comparison is possible for this route — not a recommendation. |
Provenance (provenance)
Every response includes a provenance block that identifies the snapshot the data was derived from and the freshness of that snapshot. This lets consumers reason about data age without inspecting individual exchange entries.
| Field | Type | Description |
|---|---|---|
| snapshotId | string | null | ID of the RankingSnapshot used. Null if no snapshot exists for the route. |
| snapshotCreatedAt | ISO 8601 UTC | null | When the snapshot was created. |
| freshnessBucket | string | null | Freshness bucket for the snapshot as a whole. |
| audit.noInference | true | This response never infers or fabricates data absent from the evidence pipeline. |
| audit.unknownsFirstClass | true | Unknown is a first-class response state — not an error or omission. |
| audit.contractVersion | "v1" | Contract version of this response. |
Freshness semantics
Freshness buckets are derived from the capturedAt timestamp of each evidence row using canonical thresholds:
| Bucket | Meaning | |
|---|---|---|
| FRESH | Evidence captured within the last 7 days. | |
| DEGRADED | Evidence is 7–30 days old. Still usable, but age should be noted. | |
| STALE | Evidence is 30–90 days old. Fee ranges may not reflect current exchange pricing. | |
| UNRANKABLE | Evidence is older than 90 days. Not eligible for cost comparison. | |
| NO_TIMESTAMP | Timestamp is missing from the evidence row. | |
| UNKNOWN | Freshness cannot be derived. Treat as not fresh. |
These thresholds are canonical across Augea's data pipeline and will not change within v1.
Supported markets (beta)
The API currently covers the following markets. Coverage expands over time. Queries outside these markets return UNSUPPORTED_SCENARIO (404).
Countries (10)
US, GB, DE, SE, CA, AU, FR, NL, SG, PL
Assets (18)
BTC, ETH, SOL, XRP, ADA, DOGE, AVAX, LINK, DOT, MATIC, LTC, BCH, PEPE, SHIB, UNI, TAO, XLM, ATOM
Rails (2)
card, bank
33 exchanges are tracked across these markets. Not every exchange supports every market combination. The API returns the full catalog with per-exchange viability states.
Versioning
The response carries a version: "augea-route-viability.v1" field. Within v1, the contract is additive-only: new fields may be added, but existing fields will not be removed or renamed without a version bump. Consumers should tolerate unknown fields.
The same versioning applies to error responses — the version field is present on both success and error shapes.
Rate limits (beta)
The current rate limit is 60 requests per minute per API key, enforced with a sliding window. This is a per-instance limit — Augea runs on serverless infrastructure and rate limit state is not shared across instances. At low beta traffic volumes, this is sufficient. Limits will evolve before general availability.
On 429, the response includes a Retry-After header with the number of seconds until the oldest request in the window expires.
Beta access
The Route Viability API is in beta. To request access, contact api@augea.io with:
- What you are building and who your users are
- Which markets (countries, assets, rails) you need
- Expected query volume
What beta includes
- Full v1 response contract — all fields documented on this page
- 60 requests per minute per key
- 10 countries, 18 assets, 2 payment rails, 33 exchanges
- Email support for integration questions
- No billing — beta access is free
What beta does not include
- No uptime SLA — best-effort availability on serverless infrastructure
- No self-serve key management — keys are provisioned manually
- No webhook or streaming — polling only
- No SDK or client library — HTTP + JSON only
- Rate limits and coverage may change before general availability
Pricing will be announced before general availability. There is no charge and no commitment during the beta period.
Augea Route Viability API · v1 beta · Estimates, not quotes. · augea.io