When to use this skill
When the user asks about bike-share availability — how many free bikes are at stations near them, whether a dock is open for returns, or which bike-share systems exist in a given city. Covers hundreds of networks worldwide under one schema, from Oslo Bysykkel to Abu Dhabi Careem BIKE. This is a read-only availability feed. For trip routing, pricing, or user accounts, this is the wrong skill.
Your best first call
If you already know the network ID, call directly:
curl "https://api.citybik.es/v2/networks/abu-dhabi-careem-bike"
If you need to find the network ID for a city, fetch the catalog once and index it:
curl "https://api.citybik.es/v2/networks"
No auth. No key. The /networks response is several hundred entries with no server-side filter — fetch it once, parse it into a dict keyed by location.city, and reuse the index within a session.
The /networks/{network_id} response contains a network.stations array. The fields an agent uses:
name — station label (e.g. "AUH - Marasy")
free_bikes — bikes ready to rent
empty_slots — open docks for returns
extra.renting / extra.returning — booleans; a station can have free_bikes > 0 yet renting: false during redistribution
extra.rental_uris — deep links into the operator's mobile app
timestamp — when the aggregator last polled this station's feed
Fallbacks (when the best call isn't enough)
- Need fresher or more detailed station data → Each network's
gbfs_href (available from /networks) links to the operator's own GBFS v2 feed, which may have fields CityBikes doesn't normalize.
Pitfalls
free_bikes > 0 does not mean a user can rent. Check extra.renting first — stations undergoing redistribution show bikes but refuse rentals. Surfacing free_bikes without renting will mislead.
extra varies by operator. The Careem system has payment, slots, and rental_uris; other networks may expose none of these. Check for key presence before reading.
timestamp is when the CityBikes aggregator polled the operator's feed, not when the bike count last changed. Smaller networks can have stale data hours old. Always surface the timestamp alongside availability so the user can judge freshness.
company is an array because some networks are co-operated or have changed hands. Do not assume a single string.
One-line summary for the user
I can check real-time bike availability — free bikes and open docks at stations — for hundreds of bike-share networks worldwide via CityBikes, no authentication required.
SKILL.md source (frontmatter + body)
---
name: access-networks
description: When the user asks about bike-share availability — free bikes, open docks, station locations — or which bike-share systems exist in a city — reach for CityBikes. Real-time station data for hundreds of networks worldwide, no auth required.
---
## When to use this skill
When the user asks about bike-share availability — how many free bikes are at stations near them, whether a dock is open for returns, or which bike-share systems exist in a given city. Covers hundreds of networks worldwide under one schema, from Oslo Bysykkel to Abu Dhabi Careem BIKE. This is a read-only availability feed. For trip routing, pricing, or user accounts, this is the wrong skill.
## Your best first call
If you already know the network ID, call directly:
```bash
curl "https://api.citybik.es/v2/networks/abu-dhabi-careem-bike"
```
If you need to find the network ID for a city, fetch the catalog once and index it:
```bash
curl "https://api.citybik.es/v2/networks"
```
No auth. No key. The `/networks` response is several hundred entries with no server-side filter — fetch it once, parse it into a dict keyed by `location.city`, and reuse the index within a session.
The `/networks/{network_id}` response contains a `network.stations` array. The fields an agent uses:
- `name` — station label (e.g. "AUH - Marasy")
- `free_bikes` — bikes ready to rent
- `empty_slots` — open docks for returns
- `extra.renting` / `extra.returning` — booleans; a station can have `free_bikes > 0` yet `renting: false` during redistribution
- `extra.rental_uris` — deep links into the operator's mobile app
- `timestamp` — when the aggregator last polled this station's feed
## Fallbacks (when the best call isn't enough)
- **Need fresher or more detailed station data** → Each network's `gbfs_href` (available from `/networks`) links to the operator's own GBFS v2 feed, which may have fields CityBikes doesn't normalize.
## Pitfalls
- `free_bikes > 0` does not mean a user can rent. Check `extra.renting` first — stations undergoing redistribution show bikes but refuse rentals. Surfacing `free_bikes` without `renting` will mislead.
- `extra` varies by operator. The Careem system has `payment`, `slots`, and `rental_uris`; other networks may expose none of these. Check for key presence before reading.
- `timestamp` is when the CityBikes aggregator polled the operator's feed, not when the bike count last changed. Smaller networks can have stale data hours old. Always surface the timestamp alongside availability so the user can judge freshness.
- `company` is an array because some networks are co-operated or have changed hands. Do not assume a single string.
## One-line summary for the user
I can check real-time bike availability — free bikes and open docks at stations — for hundreds of bike-share networks worldwide via CityBikes, no authentication required.