{
  "routing": {
    "version": "2",
    "summary": "Cheapest provider that can actually serve the request, meets the caller's constraints, and is currently healthy.",
    "steps": [
      "Start with every provider offering the requested capability.",
      "Exclude any whose declared coverage puts the request outside what it serves.",
      "Exclude any whose price exceeds max_price, when the caller gives one.",
      "Exclude any whose measured p50 latency exceeds max_latency_ms, when the caller gives one.",
      "Exclude any whose settle rate over its last 20 calls is below 50 percent.",
      "Prefer a provider known to cover the request over one whose coverage the request does not establish.",
      "Of what remains, choose the lowest price.",
      "Break ties by lower p50 latency, then by provider id, so the choice is reproducible."
    ],
    "inputs_used": [
      "published price",
      "declared coverage",
      "measured p50 latency",
      "recent settle rate",
      "caller constraints"
    ],
    "inputs_never_used": [
      "any provider's call volume",
      "any provider's revenue",
      "who the caller is"
    ],
    "coverage_note": "A provider declares the ground it covers. A request that lands outside is not routed there, and a regional provider is not preferred over a global one on price alone unless the request says it is in that region (a country hint, or coordinates inside the declared box).",
    "failure_note": "When the chosen provider fails, another provider that covers the same request is tried, and only the one that answered is charged. When there is no such provider, the same one is asked a second time. A request the upstream refused is not asked twice. A call that never settles is refunded."
  },
  "query": null,
  "rails": {
    "netted": {
      "planes": [
        "settlement"
      ],
      "status": "live",
      "note": "Routavo-native. Deposit USDC on Base to the deposit address, prove the wallet for a key, and every call debits the balance before the upstream is touched; failed calls are refunded. Providers are owed their share of what settled and are paid out in batches so gas amortises, which is what makes a 1% take rate work below a cent."
    },
    "x402": {
      "planes": [
        "settlement",
        "discovery"
      ],
      "status": "configured, no facilitator",
      "note": "HTTP 402 with USDC on Base. One EIP-3009 authorization pays one call: Routavo checks the signer, a facilitator verifies and settles it on chain, and the receipt carries the transaction. Listings are published in the x402 format so facilitator-fed catalogues can find them."
    },
    "mpp": {
      "planes": [
        "authorization",
        "settlement"
      ],
      "status": "planned",
      "note": "Machine Payments Protocol (Stripe, Tempo). One integration for every method an agent holds: cards, Link, Klarna, Affirm and stablecoins. Routavo prices calls in fractions of a cent and every Stripe rail has a floor above that, so MPP money tops up a balance and calls meter off the balance. Sub-cent per call stays on x402 and the ledger."
    },
    "ap2": {
      "planes": [
        "authorization"
      ],
      "status": "planned",
      "note": "Agent Payments Protocol (Google, FIDO). A signed mandate is a spend authorization with verifiable intent, including human-not-present. Maps onto caps and approvals."
    },
    "ucp": {
      "planes": [
        "discovery"
      ],
      "status": "planned",
      "note": "Universal Commerce Protocol (Google). discover() exposed as a UCP catalogue so commerce agents find API capabilities the same way they find products."
    },
    "acp": {
      "planes": [
        "discovery",
        "checkout"
      ],
      "status": "considered",
      "note": "Agentic Commerce Protocol (Stripe, OpenAI). Merchant checkout for products; relevant only as prepaid credit packs sold as products. Low priority."
    }
  },
  "payment": {
    "network": "base",
    "asset": "USDC",
    "asset_contract": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
    "explorer": "https://basescan.org",
    "deposit_address": "0xc416f5ab9463b8a55884e6c6b9e82f594ff6f627",
    "deposits": true,
    "x402": false,
    "facilitator": false,
    "card_topup": null,
    "x402_topup": null,
    "live": true,
    "payouts": {
      "schedule": "weekly",
      "day": "Monday",
      "minimum_usd": 10,
      "asset": "USDC",
      "network": "base",
      "method": "sent by the operator and recorded against the chain",
      "text": "Weekly, on Mondays: what you are owed is sent in USDC on Base to your payout address when it comes to $10.00 or more. Less than that carries over to the next week. A share held for an open dispute is paid after the dispute is resolved."
    },
    "note": "Or deposit USDC on base to the deposit address from a wallet you control, prove the wallet at /api/wallet for a key, and calls are paid from that balance. x402 per-call payments are off (no facilitator configured)."
  },
  "limits": {
    "free_tier": {
      "calls_per_day": 2000,
      "spend_per_day_usd": 0.25,
      "note": "The free tier on this deployment serves 2000 calls a day in all, shared by every caller on it, and resets at midnight UTC. A caller who is not identified is also held to a small daily spend at list prices."
    },
    "paid": {
      "spend_per_day_usd": 5,
      "note": "A proven wallet or a funded account has its own daily cap, this by default, which its admin key can change. Paid calls never count toward the free tier's limit and are never refused by it."
    },
    "per_listing": "A listing may declare its own per-minute and per-day limits; they are shown on it as limits and apply to every caller."
  },
  "trust_tiers": {
    "verified": "declared a capability contract and terms, and passed a test call Routavo ran on the stated date. Not an endorsement.",
    "listed": "opted into the catalog with partial declarations; no passing test call on record.",
    "unverified": "on the network but not opted into the catalog, or missing the declarations a listing needs."
  },
  "contracts": {
    "geocode@1": {
      "capability": "geocode",
      "version": 1,
      "input": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Place name to resolve, e.g. \"Denver\""
          },
          "limit": {
            "type": "integer",
            "description": "How many matches, 1 to 10",
            "default": 3
          },
          "language": {
            "type": "string",
            "description": "Two letter language code",
            "default": "en"
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "output": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "country": {
                  "type": "string"
                },
                "country_code": {
                  "type": "string"
                },
                "region": {
                  "type": "string"
                },
                "timezone": {
                  "type": "string"
                },
                "population": {
                  "type": "integer"
                }
              },
              "required": [
                "name",
                "lat",
                "lng"
              ]
            }
          }
        },
        "required": [
          "results"
        ]
      },
      "examples": [
        {
          "input": {
            "query": "Denver",
            "limit": 1
          },
          "output": {
            "results": [
              {
                "name": "Denver",
                "lat": 39.73915,
                "lng": -104.9847,
                "country": "United States",
                "country_code": "US",
                "region": "Colorado",
                "timezone": "America/Denver",
                "population": 729019
              }
            ]
          }
        }
      ]
    },
    "reverse_geocode@1": {
      "capability": "reverse_geocode",
      "version": 1,
      "input": {
        "type": "object",
        "properties": {
          "lat": {
            "type": "number",
            "description": "Latitude, -90 to 90"
          },
          "lng": {
            "type": "number",
            "description": "Longitude, -180 to 180"
          }
        },
        "required": [
          "lat",
          "lng"
        ],
        "additionalProperties": false
      },
      "output": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "address": {
                  "type": "string"
                },
                "street": {
                  "type": "string"
                },
                "city": {
                  "type": "string"
                },
                "postcode": {
                  "type": "string"
                },
                "region": {
                  "type": "string"
                },
                "country_code": {
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "distance_m": {
                  "type": "number"
                }
              },
              "required": [
                "address"
              ]
            }
          }
        },
        "required": [
          "results"
        ]
      },
      "examples": [
        {
          "input": {
            "lat": 48.8566,
            "lng": 2.3522
          },
          "output": {
            "results": [
              {
                "address": "8 Place de l'Hotel de Ville 75004 Paris",
                "street": "Place de l'Hotel de Ville",
                "city": "Paris",
                "postcode": "75004",
                "region": "Ile-de-France",
                "country_code": "FR",
                "lat": 48.856737,
                "lng": 2.352092,
                "distance_m": 17
              }
            ]
          }
        }
      ]
    },
    "elevation@1": {
      "capability": "elevation",
      "version": 1,
      "input": {
        "type": "object",
        "properties": {
          "lat": {
            "type": "number",
            "description": "Latitude, -90 to 90"
          },
          "lng": {
            "type": "number",
            "description": "Longitude, -180 to 180"
          }
        },
        "required": [
          "lat",
          "lng"
        ],
        "additionalProperties": false
      },
      "output": {
        "type": "object",
        "properties": {
          "elevation_m": {
            "type": "number"
          },
          "lat": {
            "type": "number"
          },
          "lng": {
            "type": "number"
          },
          "resolution_m": {
            "type": "number"
          },
          "dataset": {
            "type": "string"
          }
        },
        "required": [
          "elevation_m"
        ]
      },
      "examples": [
        {
          "input": {
            "lat": 39.747114,
            "lng": -104.996334
          },
          "output": {
            "elevation_m": 1589.33,
            "lat": 39.747114,
            "lng": -104.996334,
            "resolution_m": 1,
            "dataset": "3DEP"
          }
        }
      ]
    },
    "quakes@1": {
      "capability": "quakes",
      "version": 1,
      "input": {
        "type": "object",
        "properties": {
          "min_magnitude": {
            "type": "number",
            "description": "Smallest magnitude to report, e.g. 2.5",
            "default": 2.5
          },
          "limit": {
            "type": "integer",
            "description": "How many events, 1 to 50",
            "default": 10
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "output": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "magnitude": {
                  "type": "number"
                },
                "place": {
                  "type": "string"
                },
                "time": {
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "depth_km": {
                  "type": "number"
                }
              },
              "required": [
                "magnitude",
                "time"
              ]
            }
          }
        },
        "required": [
          "events"
        ]
      },
      "examples": [
        {
          "input": {
            "min_magnitude": 4,
            "limit": 1
          },
          "output": {
            "events": [
              {
                "id": "aka2026rzfqpv",
                "magnitude": 4,
                "place": "3 km SE of Port Clarence, Alaska",
                "time": "2026-09-10T22:23:10.021Z",
                "lat": 65.244,
                "lng": -166.793,
                "depth_km": 5
              }
            ]
          }
        }
      ]
    },
    "forecast@1": {
      "capability": "forecast",
      "version": 1,
      "input": {
        "type": "object",
        "properties": {
          "lat": {
            "type": "number",
            "description": "Latitude, -90 to 90"
          },
          "lng": {
            "type": "number",
            "description": "Longitude, -180 to 180"
          },
          "days": {
            "type": "integer",
            "description": "Forecast days, 1 to 7",
            "default": 3
          }
        },
        "required": [
          "lat",
          "lng"
        ],
        "additionalProperties": false
      },
      "output": {
        "type": "object",
        "properties": {
          "current": {
            "type": "object",
            "properties": {
              "temp_c": {
                "type": "number"
              },
              "wind_kph": {
                "type": "number"
              }
            }
          },
          "days": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string"
                },
                "max_c": {
                  "type": "number"
                },
                "min_c": {
                  "type": "number"
                },
                "precipitation_mm": {
                  "type": "number"
                }
              },
              "required": [
                "date"
              ]
            }
          }
        },
        "required": [
          "days"
        ]
      },
      "examples": [
        {
          "input": {
            "lat": 39.74,
            "lng": -104.98,
            "days": 2
          },
          "output": {
            "current": {
              "temp_c": 21.4,
              "wind_kph": 9.2
            },
            "days": [
              {
                "date": "2026-08-24",
                "max_c": 28.1,
                "min_c": 14.2,
                "precipitation_mm": 0
              },
              {
                "date": "2026-08-25",
                "max_c": 27.4,
                "min_c": 13.8,
                "precipitation_mm": 1.2
              }
            ]
          }
        }
      ]
    }
  },
  "recipes": [
    {
      "recipe": "weather_for_place",
      "summary": "Current conditions and a daily forecast for a place name: geocode, then forecast at the top match.",
      "input": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Place name, e.g. \"Denver\""
          },
          "days": {
            "type": "integer",
            "description": "Forecast days, 1 to 7",
            "default": 3
          }
        },
        "required": [
          "query"
        ]
      },
      "steps": [
        {
          "id": "place",
          "capability": "geocode"
        },
        {
          "id": "weather",
          "capability": "forecast"
        }
      ],
      "output": "weather",
      "estimated_price": {
        "amount": "0.0041",
        "asset": "USDC",
        "note": "cheapest eligible provider per step at quote time"
      },
      "example": {
        "input": {
          "query": "Denver",
          "days": 2
        }
      }
    }
  ],
  "providers": [
    {
      "provider": "open-meteo.geocode",
      "capability": "geocode",
      "summary": "Resolve a place name to coordinates, country, timezone and population.",
      "price": {
        "amount": "0.0021",
        "asset": "USDC"
      },
      "latency_p50_ms": 427,
      "settle_rate": 100,
      "health_samples": 20,
      "terms": "Upstream data: Open-Meteo geocoding, CC BY 4.0, attribution required. The data licence allows commercial use; their terms of service do not allow it on the free API, which is what this listing calls. Set OPEN_METEO_API_KEY to a subscription key and this listing calls the customer endpoint instead, where commercial use is permitted.",
      "attribution": "Geocoding data by Open-Meteo.com (CC BY 4.0)",
      "coverage": {
        "scope": "global"
      },
      "limits": {
        "per_day": 10000,
        "per_minute": 600
      },
      "commercial_use": false,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "geocode@1",
      "tags": [
        "geocoding",
        "coordinates",
        "latitude",
        "longitude",
        "places",
        "location",
        "address",
        "city"
      ],
      "aliases": [
        "geocoding",
        "geolocate",
        "place lookup",
        "address to coordinates",
        "city coordinates"
      ],
      "trust": {
        "tier": "verified",
        "meaning": "declared a capability contract and terms, and passed a test call Routavo ran on the stated date. Not an endorsement.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "non-commercial",
          "test_call": "2026-10-10",
          "receipts_signed": true,
          "listed": true
        },
        "health": "measured",
        "flags": [
          "upstream licensed for non-commercial use; quoted price is illustrative until relicensed"
        ]
      }
    },
    {
      "provider": "open-meteo.forecast",
      "capability": "forecast",
      "summary": "Current conditions and a daily forecast for a latitude and longitude.",
      "price": {
        "amount": "0.0034",
        "asset": "USDC"
      },
      "latency_p50_ms": 399,
      "settle_rate": 100,
      "health_samples": 18,
      "terms": "Upstream data: Open-Meteo forecast, CC BY 4.0, attribution required. The data licence allows commercial use; their terms of service do not allow it on the free API, which is what this listing calls. Set OPEN_METEO_API_KEY to a subscription key and this listing calls the customer endpoint instead, where commercial use is permitted.",
      "attribution": "Weather data by Open-Meteo.com",
      "coverage": {
        "scope": "global"
      },
      "limits": {
        "per_day": 10000,
        "per_minute": 600
      },
      "commercial_use": false,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "forecast@1",
      "tags": [
        "weather",
        "temperature",
        "rain",
        "precipitation",
        "wind",
        "conditions",
        "daily",
        "outlook"
      ],
      "aliases": [
        "weather",
        "weather forecast",
        "current weather",
        "conditions",
        "temperature"
      ],
      "trust": {
        "tier": "verified",
        "meaning": "declared a capability contract and terms, and passed a test call Routavo ran on the stated date. Not an endorsement.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "non-commercial",
          "test_call": "2026-10-10",
          "receipts_signed": true,
          "listed": true
        },
        "health": "thin",
        "flags": [
          "upstream licensed for non-commercial use; quoted price is illustrative until relicensed"
        ]
      }
    },
    {
      "provider": "met-no.forecast",
      "capability": "forecast",
      "summary": "Worldwide hourly forecast rolled up by day, from the Norwegian Meteorological Institute.",
      "price": {
        "amount": "0.0020",
        "asset": "USDC"
      },
      "latency_p50_ms": 4,
      "settle_rate": 100,
      "health_samples": 20,
      "terms": "Upstream data: MET Norway, under NLOD 2.0 and CC BY 4.0. Commercial use and redistribution are permitted with credit. Their terms require an identifying User-Agent and conditional caching; Routavo does both.",
      "attribution": "Data from MET Norway",
      "coverage": {
        "scope": "global"
      },
      "limits": {
        "per_minute": 1200
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "forecast@1",
      "tags": [
        "weather",
        "temperature",
        "rain",
        "precipitation",
        "wind",
        "forecast",
        "global",
        "met",
        "yr"
      ],
      "aliases": [
        "weather",
        "weather forecast",
        "current weather",
        "conditions",
        "met norway",
        "yr.no"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "commercial",
          "test_call": null,
          "receipts_signed": true,
          "listed": true
        },
        "health": "measured",
        "flags": []
      }
    },
    {
      "provider": "usgs.quakes",
      "capability": "quakes",
      "summary": "Recent earthquakes worldwide, newest first, from the USGS.",
      "price": {
        "amount": "0.0015",
        "asset": "USDC"
      },
      "latency_p50_ms": 114,
      "settle_rate": 100,
      "health_samples": 18,
      "terms": "Upstream data: US Geological Survey. Work of the US government, in the public domain. Commercial use and redistribution permitted; credit requested.",
      "attribution": "U.S. Geological Survey",
      "coverage": {
        "scope": "global"
      },
      "limits": {
        "per_minute": 600
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "quakes@1",
      "tags": [
        "earthquake",
        "seismic",
        "quake",
        "tremor",
        "magnitude",
        "hazard",
        "global"
      ],
      "aliases": [
        "earthquakes",
        "recent earthquakes",
        "seismic activity",
        "quakes",
        "tremors"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "commercial",
          "test_call": null,
          "receipts_signed": true,
          "listed": true
        },
        "health": "thin",
        "flags": []
      }
    },
    {
      "provider": "geonet-nz.quakes",
      "capability": "quakes",
      "summary": "Recent earthquakes in and around New Zealand, from GeoNet.",
      "price": {
        "amount": "0.0012",
        "asset": "USDC"
      },
      "latency_p50_ms": 38,
      "settle_rate": 100,
      "health_samples": 18,
      "terms": "Upstream data: GeoNet, GNS Science, under CC BY 3.0 New Zealand. Commercial use and redistribution permitted with credit. New Zealand only.",
      "attribution": "GeoNet / GNS Science, CC BY 3.0 NZ",
      "coverage": {
        "scope": "regional",
        "countries": [
          "NZ"
        ],
        "note": "New Zealand and its surrounding seas"
      },
      "limits": {
        "per_minute": 600
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "quakes@1",
      "tags": [
        "earthquake",
        "seismic",
        "quake",
        "magnitude",
        "new zealand",
        "aotearoa",
        "regional"
      ],
      "aliases": [
        "earthquakes",
        "nz earthquakes",
        "new zealand earthquakes",
        "geonet"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "commercial",
          "test_call": null,
          "receipts_signed": true,
          "listed": true
        },
        "health": "thin",
        "flags": []
      }
    },
    {
      "provider": "usgs.elevation",
      "capability": "elevation",
      "summary": "Ground elevation at a point from the USGS 3D Elevation Program. United States only.",
      "price": {
        "amount": "0.0012",
        "asset": "USDC"
      },
      "latency_p50_ms": 4,
      "settle_rate": 94.4,
      "health_samples": 18,
      "terms": "Upstream data: US Geological Survey 3DEP. Work of the US government, in the public domain. Commercial use and redistribution permitted; credit requested. Coverage is the United States and its territories.",
      "attribution": "U.S. Geological Survey",
      "coverage": {
        "scope": "regional",
        "countries": [
          "US",
          "PR",
          "VI",
          "GU",
          "AS",
          "MP"
        ],
        "note": "United States and its territories"
      },
      "limits": {
        "per_minute": 600
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "elevation@1",
      "tags": [
        "elevation",
        "altitude",
        "height",
        "terrain",
        "topography",
        "dem",
        "united states"
      ],
      "aliases": [
        "elevation",
        "altitude",
        "height above sea level",
        "how high"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "commercial",
          "test_call": null,
          "receipts_signed": true,
          "listed": true
        },
        "health": "thin",
        "flags": []
      }
    },
    {
      "provider": "ign-fr.geocode",
      "capability": "geocode",
      "summary": "French addresses and places resolved to coordinates, from the national mapping agency.",
      "price": {
        "amount": "0.0018",
        "asset": "USDC"
      },
      "latency_p50_ms": 4,
      "settle_rate": 100,
      "health_samples": 18,
      "terms": "Upstream data: IGN Geoplateforme, Base Adresse Nationale, under Licence Ouverte / Etalab 2.0. Commercial use and redistribution are explicitly permitted; the source and the date of last update must be credited. France only.",
      "attribution": "IGN / Base Adresse Nationale, Licence Ouverte 2.0",
      "coverage": {
        "scope": "regional",
        "countries": [
          "FR"
        ],
        "note": "France, metropolitan and Corsica"
      },
      "limits": {
        "per_minute": 3000
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "geocode@1",
      "tags": [
        "geocode",
        "address",
        "coordinates",
        "france",
        "french",
        "adresse",
        "postcode"
      ],
      "aliases": [
        "geocode",
        "address lookup",
        "french address",
        "adresse",
        "france geocoding"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "commercial",
          "test_call": null,
          "receipts_signed": true,
          "listed": true
        },
        "health": "thin",
        "flags": []
      }
    },
    {
      "provider": "ign-fr.reverse",
      "capability": "reverse_geocode",
      "summary": "A French street address for a latitude and longitude, from the national mapping agency.",
      "price": {
        "amount": "0.0018",
        "asset": "USDC"
      },
      "latency_p50_ms": 4,
      "settle_rate": 100,
      "health_samples": 18,
      "terms": "Upstream data: IGN Geoplateforme, Base Adresse Nationale, under Licence Ouverte / Etalab 2.0. Commercial use and redistribution are explicitly permitted; the source and the date of last update must be credited. France only.",
      "attribution": "IGN / Base Adresse Nationale, Licence Ouverte 2.0",
      "coverage": {
        "scope": "regional",
        "countries": [
          "FR"
        ],
        "note": "France, metropolitan and Corsica"
      },
      "limits": {
        "per_minute": 3000
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "reverse_geocode@1",
      "tags": [
        "reverse geocode",
        "address",
        "coordinates",
        "france",
        "french",
        "adresse"
      ],
      "aliases": [
        "reverse geocode",
        "reverse geocoding",
        "address from coordinates",
        "address at coordinates",
        "address near coordinates",
        "what address is this",
        "reverse lookup"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "commercial",
          "test_call": null,
          "receipts_signed": true,
          "listed": true
        },
        "health": "thin",
        "flags": []
      }
    },
    {
      "provider": "census-us.geocode",
      "capability": "geocode",
      "summary": "United States street addresses resolved to coordinates, from the Census Bureau.",
      "price": {
        "amount": "0.0016",
        "asset": "USDC"
      },
      "latency_p50_ms": 4,
      "settle_rate": 100,
      "health_samples": 18,
      "terms": "Upstream data: US Census Bureau geocoder. Work of the US government, in the public domain. Commercial use and redistribution permitted; credit requested. United States only, and it resolves street addresses rather than place names.",
      "attribution": "U.S. Census Bureau",
      "coverage": {
        "scope": "regional",
        "countries": [
          "US",
          "PR"
        ],
        "note": "United States street addresses; it does not resolve place names"
      },
      "limits": {
        "per_minute": 600
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": "geocode@1",
      "tags": [
        "geocode",
        "address",
        "coordinates",
        "united states",
        "usa",
        "street",
        "zip"
      ],
      "aliases": [
        "geocode",
        "address lookup",
        "us address",
        "american address",
        "street address"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": true,
          "terms": true,
          "licensing": "commercial",
          "test_call": null,
          "receipts_signed": true,
          "listed": true
        },
        "health": "thin",
        "flags": []
      }
    },
    {
      "provider": "ecb-frankfurter.rates",
      "capability": "exchange_rates",
      "summary": "Euro foreign-exchange reference rates from the European Central Bank, served as JSON.",
      "price": {
        "amount": "0.0012",
        "asset": "USDC"
      },
      "latency_p50_ms": null,
      "settle_rate": null,
      "health_samples": 0,
      "terms": "Euro reference rates from the European Central Bank, served as JSON by Frankfurter. Free to reuse with the source cited; rates are for information, not for transactions.",
      "attribution": "Exchange-rate data from the European Central Bank, via Frankfurter (frankfurter.dev). Rates are available free from the ECB; for information only, not for transactions.",
      "coverage": {
        "scope": "global"
      },
      "limits": {
        "per_minute": 60,
        "per_day": 5000
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": null,
      "tags": [
        "exchange rate",
        "exchange rates",
        "currency",
        "forex",
        "fx",
        "euro",
        "eur",
        "conversion",
        "money",
        "ecb"
      ],
      "aliases": [
        "exchange rates",
        "currency conversion",
        "fx rates",
        "forex",
        "euro rates",
        "convert currency"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": false,
          "terms": true,
          "licensing": "commercial",
          "test_call": "2026-09-23",
          "receipts_signed": true,
          "listed": true
        },
        "health": "unmeasured",
        "flags": []
      }
    },
    {
      "provider": "openholidays.holidays",
      "capability": "holidays",
      "summary": "Public holidays for a country and date range, from the OpenHolidays API. Europe only.",
      "price": {
        "amount": "0.0013",
        "asset": "USDC"
      },
      "latency_p50_ms": null,
      "settle_rate": null,
      "health_samples": 0,
      "terms": "Public-holiday data from the OpenHolidays API, licensed ODbL 1.0. Commercial use permitted; the ODbL notice must travel with the data.",
      "attribution": "Contains information from the OpenHolidays API (openholidaysapi.org), made available under the Open Database License (ODbL) 1.0.",
      "coverage": {
        "scope": "regional",
        "countries": [
          "AT",
          "BE",
          "CH",
          "DE",
          "DK",
          "EE",
          "ES",
          "FR",
          "HR",
          "HU",
          "IE",
          "IT",
          "LI",
          "LT",
          "LU",
          "LV",
          "MT",
          "NL",
          "PL",
          "PT",
          "RO",
          "SE",
          "SI",
          "SK",
          "BG",
          "CZ",
          "FI",
          "GB",
          "NO"
        ],
        "note": "Europe; OpenHolidays has no US coverage"
      },
      "limits": {
        "per_minute": 60,
        "per_day": 5000
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": null,
      "tags": [
        "holidays",
        "public holidays",
        "bank holidays",
        "calendar",
        "days off",
        "observances",
        "europe"
      ],
      "aliases": [
        "public holidays",
        "bank holidays",
        "holidays",
        "days off",
        "national holidays"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": false,
          "terms": true,
          "licensing": "commercial",
          "test_call": "2026-09-23",
          "receipts_signed": true,
          "listed": true
        },
        "health": "unmeasured",
        "flags": []
      }
    },
    {
      "provider": "sec-edgar.filings",
      "capability": "company_filings",
      "summary": "Recent SEC filings for a US company, looked up by CIK, from SEC EDGAR.",
      "price": {
        "amount": "0.0016",
        "asset": "USDC"
      },
      "latency_p50_ms": null,
      "settle_rate": null,
      "health_samples": 0,
      "terms": "US company filings from SEC EDGAR (data.sec.gov), public-domain US government data, free to reuse. Not affiliated with or endorsed by the SEC.",
      "attribution": "Source: US Securities and Exchange Commission, EDGAR (data.sec.gov). Not affiliated with or endorsed by the SEC.",
      "coverage": {
        "scope": "regional",
        "countries": [
          "US"
        ],
        "note": "US companies that file with the SEC"
      },
      "limits": {
        "per_minute": 60,
        "per_day": 5000
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": null,
      "tags": [
        "sec",
        "edgar",
        "filings",
        "company filings",
        "stock",
        "ticker",
        "10-k",
        "10-q",
        "8-k",
        "annual report",
        "united states"
      ],
      "aliases": [
        "sec filings",
        "company filings",
        "edgar",
        "annual report",
        "financial filings"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": false,
          "terms": true,
          "licensing": "commercial",
          "test_call": "2026-09-23",
          "receipts_signed": true,
          "listed": true
        },
        "health": "unmeasured",
        "flags": []
      }
    },
    {
      "provider": "wikipedia.summary",
      "capability": "wiki_summary",
      "summary": "A short summary of a Wikipedia article, from the Wikimedia REST API.",
      "price": {
        "amount": "0.0012",
        "asset": "USDC"
      },
      "latency_p50_ms": null,
      "settle_rate": null,
      "health_samples": 0,
      "terms": "Article summaries from Wikipedia (Wikimedia REST API), text under CC BY-SA 4.0. Commercial reuse allowed with attribution and share-alike; the extract is returned unmodified.",
      "attribution": "From Wikipedia, licensed CC BY-SA 4.0 (creativecommons.org/licenses/by-sa/4.0). Text unmodified.",
      "coverage": {
        "scope": "global"
      },
      "limits": {
        "per_minute": 100,
        "per_day": 5000
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": null,
      "tags": [
        "wikipedia",
        "encyclopedia",
        "article",
        "summary",
        "definition",
        "reference",
        "wiki",
        "who is",
        "what is"
      ],
      "aliases": [
        "wikipedia",
        "wiki summary",
        "article summary",
        "encyclopedia",
        "look up"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": false,
          "terms": true,
          "licensing": "commercial",
          "test_call": "2026-09-23",
          "receipts_signed": true,
          "listed": true
        },
        "health": "unmeasured",
        "flags": []
      }
    },
    {
      "provider": "nws.alerts",
      "capability": "weather_alerts",
      "summary": "Active weather alerts for a US state or point, from the National Weather Service.",
      "price": {
        "amount": "0.0014",
        "asset": "USDC"
      },
      "latency_p50_ms": null,
      "settle_rate": null,
      "health_samples": 0,
      "terms": "US weather alerts from the National Weather Service (api.weather.gov), public-domain US government data. Alert text unmodified; check weather.gov for official current information.",
      "attribution": "Source: US National Weather Service (api.weather.gov). Alert text unmodified; not affiliated with NOAA/NWS.",
      "coverage": {
        "scope": "regional",
        "countries": [
          "US"
        ],
        "note": "United States and its territories"
      },
      "limits": {
        "per_minute": 60,
        "per_day": 5000
      },
      "commercial_use": true,
      "billing": "metered on 2xx; paid from a proven wallet's balance or by x402, free tier otherwise",
      "free_tier": true,
      "contract": null,
      "tags": [
        "weather alerts",
        "weather warnings",
        "watches",
        "severe weather",
        "storm",
        "advisory",
        "nws",
        "noaa",
        "united states"
      ],
      "aliases": [
        "weather alerts",
        "weather warnings",
        "severe weather",
        "storm warnings",
        "nws alerts"
      ],
      "trust": {
        "tier": "listed",
        "meaning": "opted into the catalog with partial declarations; no passing test call on record.",
        "checks": {
          "contract": false,
          "terms": true,
          "licensing": "commercial",
          "test_call": "2026-09-23",
          "receipts_signed": true,
          "listed": true
        },
        "health": "unmeasured",
        "flags": []
      }
    }
  ],
  "unmet_demand": [],
  "alias_suggestions": [],
  "comparables": [
    {
      "capability": "geocode",
      "providers": 3,
      "median": 0.0018,
      "p25": 0.0016,
      "p75": 0.0021,
      "source": "published list prices only"
    },
    {
      "capability": "forecast",
      "providers": 2,
      "median": 0.0034,
      "p25": 0.002,
      "p75": 0.0034,
      "source": "published list prices only"
    },
    {
      "capability": "quakes",
      "providers": 2,
      "median": 0.0015,
      "p25": 0.0012,
      "p75": 0.0015,
      "source": "published list prices only"
    },
    {
      "capability": "elevation",
      "providers": 1,
      "median": 0.0012,
      "p25": 0.0012,
      "p75": 0.0012,
      "source": "published list prices only"
    },
    {
      "capability": "reverse_geocode",
      "providers": 1,
      "median": 0.0018,
      "p25": 0.0018,
      "p75": 0.0018,
      "source": "published list prices only"
    },
    {
      "capability": "exchange_rates",
      "providers": 1,
      "median": 0.0012,
      "p25": 0.0012,
      "p75": 0.0012,
      "source": "published list prices only"
    },
    {
      "capability": "holidays",
      "providers": 1,
      "median": 0.0013,
      "p25": 0.0013,
      "p75": 0.0013,
      "source": "published list prices only"
    },
    {
      "capability": "company_filings",
      "providers": 1,
      "median": 0.0016,
      "p25": 0.0016,
      "p75": 0.0016,
      "source": "published list prices only"
    },
    {
      "capability": "wiki_summary",
      "providers": 1,
      "median": 0.0012,
      "p25": 0.0012,
      "p75": 0.0012,
      "source": "published list prices only"
    },
    {
      "capability": "weather_alerts",
      "providers": 1,
      "median": 0.0014,
      "p25": 0.0014,
      "p75": 0.0014,
      "source": "published list prices only"
    }
  ],
  "boundary": {
    "published_here": [
      "price",
      "capability",
      "terms",
      "measured p50 latency",
      "settle rate"
    ],
    "never_published": [
      "call volume",
      "revenue",
      "who called",
      "conversion by price"
    ],
    "why": "Prices are public because agents read them. Volumes are not, and never inform another provider's price. A shared intermediary pooling competitors' non-public data is the pattern the DOJ challenged in RealPage."
  },
  "settlement": "Calls to listings licensed for commercial use are paid from a proven wallet's balance, an x402 authorization, or a card-funded account. A caller without one is on the free tier where a listing has one (free_tier: true), and refused where it does not.",
  "licensing": "Some providers here run on upstreams licensed for non-commercial use only. Routavo never charges for those: their quoted prices say what a call would cost, and every caller gets them free until the upstream is relicensed."
}