When to use this skill
When the user asks whether a city has a bike-share system, which bike-share networks exist in a country, or wants to discover available bike-share systems worldwide. CityBikes aggregates hundreds of networks globally — Gulf states, Southeast Asia, and Latin America are well-represented alongside the standard European and North American systems. There is no server-side filter, so you fetch the full catalog once and filter client-side. For real-time bike availability at a specific network's stations, this is the wrong skill — use check-bike-share-availability instead.
Your best first call
curl "https://api.citybik.es/v2/networks"
No auth. No key. Fetch this ONCE per session. Parse the networks array into a dict keyed by id and index by location.city and location.country — do not re-fetch. The API has no server-side filter; all narrowing is client-side after the dump.
Each item in the networks array:
id — unique slug (e.g. abu-dhabi-careem-bike) — pass this to /v2/networks/{id} for live station data
name — human-readable network name
location.city, location.country — the filter keys you will use most often
location.latitude, location.longitude — for geographic proximity filtering
href — relative path to the network's detail endpoint (same as /v2/networks/{id})
company — array of operator names; some networks are co-operated or have changed hands without a system ID change
gbfs_href — URL to the operator's GBFS v2 feed, when available
Fallbacks (when the best call isn't enough)
- Live station availability for a known network →
/v2/networks/{network_id} returns free_bikes and empty_slots per station. This is a separate capability, not a replacement for listing networks.
- No other public API aggregates bike-share networks at this scale — if CityBikes is down, this capability is unavailable.
Pitfalls
/networks returns several hundred objects with no pagination or server-side filter. Do not re-fetch in the same conversation — the catalog is static enough that one fetch per session suffices.
- The
company field is an array because some networks are co-operated or have changed hands. Careem (a Dubai-based ride-hailing company, now an Uber subsidiary) operates Gulf bike-share systems — a different model than the municipal or nonprofit operators typical in Europe, and company reflects that.
gbfs_href is absent when the operator does not publish a GBFS feed. Treat absence as "no GBFS feed", not an error.
One-line summary for the user
I can find which bike-share networks exist in any city or country worldwide via the CityBikes catalog — no auth needed, but the API has no server-side filter, so fetch the full list once and filter client-side.
SKILL.md source (frontmatter + body)
---
name: list-networks
description: When the user asks whether a city has a bike-share system, which bike-share networks exist in a country, or wants to discover available systems worldwide — reach for CityBikes. Full catalog fetch, filter client-side.
---
## When to use this skill
When the user asks whether a city has a bike-share system, which bike-share networks exist in a country, or wants to discover available bike-share systems worldwide. CityBikes aggregates hundreds of networks globally — Gulf states, Southeast Asia, and Latin America are well-represented alongside the standard European and North American systems. There is no server-side filter, so you fetch the full catalog once and filter client-side. For real-time bike availability at a specific network's stations, this is the wrong skill — use `check-bike-share-availability` instead.
## Your best first call
```bash
curl "https://api.citybik.es/v2/networks"
```
No auth. No key. Fetch this ONCE per session. Parse the `networks` array into a dict keyed by `id` and index by `location.city` and `location.country` — do not re-fetch. The API has no server-side filter; all narrowing is client-side after the dump.
Each item in the `networks` array:
- `id` — unique slug (e.g. `abu-dhabi-careem-bike`) — pass this to `/v2/networks/{id}` for live station data
- `name` — human-readable network name
- `location.city`, `location.country` — the filter keys you will use most often
- `location.latitude`, `location.longitude` — for geographic proximity filtering
- `href` — relative path to the network's detail endpoint (same as `/v2/networks/{id}`)
- `company` — array of operator names; some networks are co-operated or have changed hands without a system ID change
- `gbfs_href` — URL to the operator's GBFS v2 feed, when available
## Fallbacks (when the best call isn't enough)
- **Live station availability for a known network** → `/v2/networks/{network_id}` returns `free_bikes` and `empty_slots` per station. This is a separate capability, not a replacement for listing networks.
- No other public API aggregates bike-share networks at this scale — if CityBikes is down, this capability is unavailable.
## Pitfalls
- `/networks` returns several hundred objects with no pagination or server-side filter. Do not re-fetch in the same conversation — the catalog is static enough that one fetch per session suffices.
- The `company` field is an array because some networks are co-operated or have changed hands. Careem (a Dubai-based ride-hailing company, now an Uber subsidiary) operates Gulf bike-share systems — a different model than the municipal or nonprofit operators typical in Europe, and `company` reflects that.
- `gbfs_href` is absent when the operator does not publish a GBFS feed. Treat absence as "no GBFS feed", not an error.
## One-line summary for the user
I can find which bike-share networks exist in any city or country worldwide via the CityBikes catalog — no auth needed, but the API has no server-side filter, so fetch the full list once and filter client-side.