CityPros public API
Read-only public data from this website, for developers and AI agents.
CityPros is a mobile app. This API publishes the same public information as this website, as JSON: the cities CityPros is live in, the communities and upcoming events listed on each city page, and the frequently asked questions. It never returns member profiles or any other personal data.
There is no API for signing up, signing in or managing a community. Those happen in the iOS and Android apps.
Base URL
https://www.citypros.appThe machine readable description is at /openapi.json (OpenAPI 3.1). A short index of the endpoints is at /api.
Authentication
None. Every endpoint is public and read-only. There are no API keys and no sign-in. Send plain GET requests. Requests from any origin are allowed, so the API can be called from a browser.
Endpoints
List cities
curl https://www.citypros.app/api/v1/citiesReturns the cities CityPros is live in, each with its slug, name, page url and api_url.
Get a city
curl https://www.citypros.app/api/v1/cities/barcelonaReturns one city with its public communities and upcoming public events. Each event has a title, description, start and end time, location, category, host, cost and, where there is one, a registration link. Private, cancelled and past events are never included. The data is refreshed about every ten minutes.
List FAQs
curl https://www.citypros.app/api/v1/faqsReturns each question and its plain text answer, as shown on the FAQ page.
Responses and errors
Every response is JSON. A successful response wraps its result in a data field. An error uses the matching HTTP status and an error object with a stable code, a message that says what went wrong and a hint that says how to fix it.
{
"error": {
"code": "city_not_found",
"status": 404,
"message": "No live city has the slug \"atlantis\".",
"hint": "List the available cities at /api/v1/cities.",
"docs_url": "https://www.citypros.app/developers"
}
}not_found(404): no endpoint exists at that path.city_not_found(404): no live city has that slug.method_not_allowed(405): the API is read-only. UseGET.upstream_unavailable(502): the data could not be loaded. Retry in a minute.
Markdown for agents
Every page on this site is also available as Markdown. Send Accept: text/markdown to the page’s normal address and the response is the same content as Markdown, with Content-Type: text/markdown. An address that does not exist returns a 404 with a Markdown body that links to the places below.
curl -H "Accept: text/markdown" https://www.citypros.app/- /llms.txt: a short overview of CityPros and its main pages.
- /sitemap.xml: every indexable page.
- /openapi.json: the API description.
Contact
Questions about the API, or something you would like it to cover? Email [email protected].