Augea

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:

  1. Request a beta key — email api@augea.io with your use case and target markets
  2. Test with real queries — try the markets you care about and inspect response quality, freshness, and coverage depth
  3. Check coverage fit — verify that the countries, assets, and rails you need are covered, and that enough exchanges are rankable for your use case
  4. 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

ParameterRequiredDescription
countrystringISO 3166-1 alpha-2 country code, uppercase. Example: US, GB, DE.
assetstringAsset symbol, uppercase, 2–6 characters. Example: BTC, ETH.
railstringPayment 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.

FieldTypeDescription
exchangeSlugstringStable lowercase identifier for the exchange (e.g. coinbase, kraken).
exchangeNamestringHuman-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.
rankablebooleanBoolean mirror of viabilityState === "rankable". Provided for consumer convenience.
feeRange{ low, high } | nullFee 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.
freshnessBucketstring | nullFRESH (<7d), DEGRADED (7–30d), STALE (30–90d), UNRANKABLE (>90d), NO_TIMESTAMP, UNKNOWN. Null for no_data entries.
snapshotIdstring | nullID of the RankingSnapshot that produced this row. Null for no_data.
capturedAtISO 8601 UTC | nullTimestamp when evidence was captured. Null for no_data.
verificationLevelstring | nullVerification level from Augea's evidence pipeline. Null for no_data.
unknownReasonstring | nullHuman-readable reason why an exchange is not rankable. Null for rankable exchanges.

Route summary fields (routeSummary)

FieldTypeDescription
totalExchangeCountnumberTotal exchanges in the catalog evaluated for this route.
rankableCountnumberExchanges with fee data verified and eligible for cost comparison.
trackingCountnumberExchanges present in snapshot but without sufficient cost data.
noDataCountnumberExchanges in catalog with no snapshot row for this route.
hasViableRoutebooleanTrue 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.

FieldTypeDescription
snapshotIdstring | nullID of the RankingSnapshot used. Null if no snapshot exists for the route.
snapshotCreatedAtISO 8601 UTC | nullWhen the snapshot was created.
freshnessBucketstring | nullFreshness bucket for the snapshot as a whole.
audit.noInferencetrueThis response never infers or fabricates data absent from the evidence pipeline.
audit.unknownsFirstClasstrueUnknown 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:

BucketMeaning
FRESHEvidence captured within the last 7 days.
DEGRADEDEvidence is 7–30 days old. Still usable, but age should be noted.
STALEEvidence is 30–90 days old. Fee ranges may not reflect current exchange pricing.
UNRANKABLEEvidence is older than 90 days. Not eligible for cost comparison.
NO_TIMESTAMPTimestamp is missing from the evidence row.
UNKNOWNFreshness 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