Install
openclaw skills install api-bridgeCurated free public APIs for AI agents — geocoding, weather, forex, validation, facts, finance, and test data. Use when an agent needs real-world data without paid API keys.
openclaw skills install api-bridgeAI agents constantly need real-world data. This skill provides a curated, tested collection of the highest-value free public APIs organized by use case. Each entry includes the endpoint pattern, output shape, and curl example.
Philosophy: Curation + examples = the product. These are stable, mostly key-free APIs with good uptime.
| Category | API | No Key | CORS |
|---|---|---|---|
| Weather | wttr.in | ✅ | ✅ |
| Weather | Open-Meteo | ✅ | ✅ |
| Geocoding | ipapi (IP→location) | ✅ | ❌ |
| Geocoding | Nominatim (geocode) | ✅ | ✅ |
| Forex | open.er-api.org | ✅ | ❌ |
| Crypto | CoinGecko | ✅ | ✅ |
| Validation | urlmeta, icon.horse | ✅ | ✅ |
| Facts | catfact.ninja | ✅ | ✅ |
| Images | dog.ceo, thecatapi | ✅ | ✅ |
| Finance | Polygon.io | ✅ | ✅ |
| Reference | Wikipedia REST | ✅ | ✅ |
| Test data | jsonplaceholder, randomuser | ✅ | ✅ |
curl -s "wttr.in/San+Jose,CA?format=j1"
Use: Current conditions, 3-day forecast, moon phase, airport weather.
Output: JSON with current_condition, weather[] (daily), nearest_area.
# Specific location
curl -s "wttr.in/San+Jose,CA?format=3"
# Named locations work well; coordinates less so
Base: https://api.open-meteo.com/v1/forecast
curl -s "https://api.open-meteo.com/v1/forecast?latitude=37.34&longitude=-121.89¤t=temperature_2m,relative_humidity_2m,weather_code,wind_speed_10m&temperature_unit=fahrenheit&wind_speed_unit=mph&timezone=America%2FLos_Angeles"
Use: Current conditions + hourly forecast, no key needed, global coverage.
Parameters:
latitude, longitude — requiredcurrent= — comma-separated variables: temperature_2m, relative_humidity_2m, weather_code, wind_speed_10m, precipitation, cloud_coverhourly= — same variables for 48h forecastdaily= — daily forecast: temperature_2m_max, temperature_2m_min, precipitation_sum, weather_codetemperature_unit=fahrenheit|celsiustimezone=America%2FLos_Angeles (or auto)Weather codes: 0=clear, 1-3=partly cloudy, 45-48=fog, 51-67=rain/drizzle, 71-77=snow, 80-82=rain showers, 95-99=thunderstorm.
Base: https://ipapi.co/json/ or https://ipapi.co/{IP}/json/
# Your sandbox出口IP
curl -s "https://ipapi.co/json/" | jq '.location, .city, .region, .country_name, .latitude, .longitude'
# Specific IP
curl -s "https://ipapi.co/8.8.8.8/json/" | jq '{city, region, country_name}'
Use: IP → city/region/country/lat-lon. Not CORS-friendly for browser use. Good for server/CLI agents.
Fields: ip, city, region, region_code, country_name, country_code, latitude, longitude, timezone, utc_offset, asn, org.
Base: https://nominatim.openstreetmap.org/search
curl -s "https://nominatim.openstreetmap.org/search?q=1600+Amphitheatre+Parkway,+Mountain+View,+CA&format=json&limit=1&addressdetails=1" \
-H "User-Agent: api-bridge/1.0"
Use: Address → lat/lon (forward) or lat/lon → address (reverse).
Reverse:
curl -s "https://nominatim.openstreetmap.org/reverse?lat=37.4223&lon=-122.0848&format=json" \
-H "User-Agent: api-bridge/1.0"
Parameters:
q= — search queryformat=json — always use thislimit=1 — first resultaddressdetails=1 — include parsed address componentsaccept-language=en — language preferenceRate limits: 1 req/sec. Always set User-Agent. Free for non-commercial use.
Base: https://open.er-api.com/v6/latest/{CURRENCY}
curl -s "https://open.er-api.com/v6/latest/USD" | jq '.rates | {JPY, EUR, GBP, CNY, CAD}'
Use: Current exchange rates. USD as base, all currencies relative to it.
Output: { "rates": { "JPY": 149.5, "EUR": 0.92, ... }, "time_last_update_utc": "..." }
Base: https://api.coingecko.com/api/v3
# Simple price
curl -s "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd&include_24hr_change=true"
# Market data
curl -s "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=bitcoin,ethereum&order=market_cap_desc&per_page=5&sparkline=false&price_change_percentage=24h"
Rate limit: 10-30 calls/min on free tier. Cache responses when possible.
Base: https://icon.horse/
# Favicon URL for any domain
curl -s "https://icon.horse/feedburner.com"
# Returns: { "url": "https://feedburner.com/favicon.ico", "found": true }
Use: Find favicon for any domain — useful for link previews and metadata enrichment.
Base: https://urlmeta.org/?
curl -s "https://urlmeta.org/?url=https://example.com"
Use: Get Open Graph / Twitter card metadata for any URL without scraping.
curl -s "https://catfact.ninja/fact"
# {"fact":"Cats have over 20 vocalizations...","length":42}
Use: Random fact generation for demos, tests, social content. Also: /breeds, /fact endpoints.
curl -s "https://dog.ceo/api/breeds/image/random"
# {"message":"https://.../images/n02102040_1005.jpg","status":"success"}
curl -s "https://dog.ceo/api/breeds/list/all" | jq '.message | keys'
Use: Random images for demos, placeholders, UI testing.
curl -s "https://api.thecatapi.com/v1/images/search"
# [{"id":"d5D", "url":"https://...","width":1600,"height":1200}]
Base: https://api.polygon.io/v1
# Market status
curl -s "https://api.polygon.io/v1/marketstatus?apiKey=DEMO_KEY"
# Last trade for a stock
curl -s "https://api.polygon.io/v2/aggs/ticker/AAPL/prev?adjusted=true&apiKey=DEMO_KEY"
Note: DEMO_KEY works for some endpoints. Real keys are free at polygon.io.
Also useful:
https://api.polygon.io/v2/aggs/ticker/{TICKER}/prev — previous day closehttps://api.polygon.io/v2/aggs/ticker/{TICKER}/range?from={DATE}&to={DATE} — historical rangeBase: https://en.wikipedia.org/api/rest_v1
# Article summary
curl -s "https://en.wikipedia.org/api/rest_v1/page/summary/OpenAI" | jq '{title, extract, thumbnail}'
# Related pages
curl -s "https://en.wikipedia.org/api/rest_v1/page/related/OpenAI" | jq '.pages[:3] | .[].title'
Use: Factual summaries, links, thumbnails for topics. Good for enriching agent responses with context.
Base: https://jsonplaceholder.typicode.com
# Posts
curl -s "https://jsonplaceholder.typicode.com/posts?userId=1" | jq '.[0]'
# Comments
curl -s "https://jsonplaceholder.typicode.com/comments?postId=1" | jq '.[0]'
# Users
curl -s "https://jsonplaceholder.typicode.com/users/1" | jq '{name, email, phone}'
# Todos
curl -s "https://jsonplaceholder.typicode.com/todos?completed=false" | jq '.[0]'
Use: API prototyping, testing HTTP clients, mock backend during development.
curl -s "https://randomuser.me/api/?results=3" | jq '.results[] | {name: .name, email, phone, location}'
Use: Generate realistic fake users with names, emails, photos, addresses for demos and tests.
wttr.in — always up, lightweightapi.open-meteo.com — professional open source project, excellent uptimeapi.coingecko.com — large project, stablecatfact.ninja — simple, reliabledog.ceo / thecatapi.com — pet image APIs, very stablejsonplaceholder.typicode.com — standard test APIrandomuser.me — standard test APIen.wikipedia.org/api/rest_v1 — Wikipedia infrastructure, very stablenominatim.openstreetmap.org — rate limited to 1 req/sec, requires User-Agentopen.er-api.org — simple project, less redundancyicon.horse — small project, less redundancypolygon.io — free tier sufficient for light useworldtimeapi.org — frequently down (2026-03 check failed)dog-api.kinduff.com — certificate expired, broken (2026-03 check failed)Install as a skill in your workspace skills directory:
# In your OpenClaw workspace:
ls skills/
# Add api-bridge/ subdirectory with this SKILL.md
The skill is documentation-first — no code to install. Agents read the SKILL.md and invoke the APIs directly.