Aristocles Pty Ltd Cities API

A reference directory of cities and towns worldwide, each with its country, first-level subdivision (state, province or region) and GeoNames identifier. Developers use it for location autocomplete, address normalisation, and giving AI agents a reliable way to resolve place names to countries. Source: Data from GeoNames (geonames.org) via the datasets/world-cities project, licensed CC BY 4.0. Licence: CC BY 4.0. Base path: /v1/data/global-cities-directory. Requires an API key (X-API-Key).

Operations 3

GET /v1/data/global-cities-directory List Global Cities Directory records #
GET /v1/data/global-cities-directory/search Search Global Cities Directory by name #
GET /v1/data/global-cities-directory/{key} Get one Global Cities Directory record by geonameid #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/aristocles-com-au:aristocles-com-au-cities-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

aristocles-com-au-cities-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Aristocles Data Cities API
  description: 'Four Australian data APIs on one key — subscriptions, trade pricing, PBS drugs, and rental prices.


    ---


    ## Quick start


    **1. Get your API key** — register in one request:

    ```

    POST /v1/auth/register

    {"email": "you@example.com", "name": "Your Name"}

    ```

    Copy the `api_key` from the response.


    **2. Authenticate** — add your key to every request as a header:

    ```

    X-API-Key: ar_live_xxxxxxxxxxxx

    ```


    **3. Run the discovery endpoint** — returns all available slugs, example calls, and your account limits:

    ```

    GET /v1/discovery

    ```


    **4. Make your first call:**

    ```

    GET /v1/prices/netflix?country=AU

    GET /v1/trades/electrician/prices?state=NSW&country=AU

    GET /v1/pbs/metformin

    GET /v1/rental/VIC/Richmond

    ```


    ---


    ## Four data domains


    | Domain | Base path | What it covers |

    |---|---|---|

    | **Subscription Pricing** | `/v1/prices`, `/v1/services` | 50+ SaaS & streaming services: Netflix, Spotify, Adobe, etc. |

    | **Contractor Trades** | `/v1/trades` | Plumbers, electricians, painters across AU, US, UK, CA, NZ |

    | **PBS Drug Pricing** | `/v1/pbs` | 14,000+ medications on Australia''s Pharmaceutical Benefits Scheme |

    | **Rental Market** | `/v1/rental` | Median weekly rent by suburb and postcode across Australia |

    | **RBA Economic Data** | `/v1/rba` | Cash rate, AUD FX rates, CPI inflation, mortgage rates, credit aggregates |


    ---


    ## MCP Server


    All four data domains are also available as MCP tools at:

    ```

    https://api.aristocles.com.au/mcp/

    ```

    Connect any MCP-compatible AI agent (Claude, GPT, Gemini) to get structured data without writing API calls.'
  version: 2.1.0
tags:
- name: Cities
  description: 'A reference directory of cities and towns worldwide, each with its country, first-level subdivision (state, province or region) and GeoNames identifier. Developers use it for location autocomplete, address normalisation, and giving AI agents a reliable way to resolve place names to countries. Source: Data from GeoNames (geonames.org) via the datasets/world-cities project, licensed CC BY 4.0. Licence: CC BY 4.0. Base path: /v1/data/global-cities-directory. Requires an API key (X-API-Key).'
paths:
  /v1/data/global-cities-directory:
    get:
      tags:
      - Cities
      summary: List Global Cities Directory records
      description: 'List Global Cities Directory records with optional filters and pagination.


        **Source:** Data from GeoNames (geonames.org) via the datasets/world-cities project, licensed CC BY 4.0 (CC BY 4.0).


        **Fields returned:**

        - `geonameid` (int) — GeoNames unique identifier for the city

        - `name` (str) — City name

        - `country` (str) — Country name

        - `subcountry` (str) — State, province or region


        **Example:** `GET /v1/data/global-cities-directory?limit=10&country=example`'
      operationId: list_endpoint_v1_data_global_cities_directory_get
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          description: Max records to return (1-100).
          default: 25
          title: Limit
        description: Max records to return (1-100).
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Records to skip, for pagination.
          default: 0
          title: Offset
        description: Records to skip, for pagination.
      - name: country
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Country name
          examples:
          - example
          title: Country
        description: Country name
      - name: subcountry
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: State, province or region
          examples:
          - example
          title: Subcountry
        description: State, province or region
      - name: X-API-Key
        in: header
        required: true
        schema:
          type: string
          title: X-Api-Key
      responses:
        '200':
          description: A page of Global Cities Directory records with pagination metadata.
          content:
            application/json:
              schema: {}
              example:
                data:
                  items:
                  - geonameid: 42
                    name: example
                    country: example
                    subcountry: example
                  total: 1
                  limit: 25
                  offset: 0
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/data/global-cities-directory/search:
    get:
      tags:
      - Cities
      summary: Search Global Cities Directory by name
      description: 'Search Global Cities Directory records by `name` (partial, case-insensitive).


        **Example:** `GET /v1/data/global-cities-directory/search?q=exa`'
      operationId: search_endpoint_v1_data_global_cities_directory_search_get
      parameters:
      - name: q
        in: query
        required: true
        schema:
          type: string
          minLength: 2
          maxLength: 100
          description: Case-insensitive partial match on name.
          examples:
          - exa
          title: Q
        description: Case-insensitive partial match on name.
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          description: Max records to return (1-100).
          default: 25
          title: Limit
        description: Max records to return (1-100).
      - name: X-API-Key
        in: header
        required: true
        schema:
          type: string
          title: X-Api-Key
      responses:
        '200':
          description: Matching Global Cities Directory records.
          content:
            application/json:
              schema: {}
              example:
                data:
                  items:
                  - geonameid: 42
                    name: example
                    country: example
                    subcountry: example
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/data/global-cities-directory/{key}:
    get:
      tags:
      - Cities
      summary: Get one Global Cities Directory record by geonameid
      description: 'Fetch a single Global Cities Directory record by its `geonameid`.


        **Example:** `GET /v1/data/global-cities-directory/42`'
      operationId: get_endpoint_v1_data_global_cities_directory__key__get
      parameters:
      - name: key
        in: path
        required: true
        schema:
          type: string
          description: The geonameid value to look up (case-insensitive).
          examples:
          - '42'
          title: Key
        description: The geonameid value to look up (case-insensitive).
      - name: X-API-Key
        in: header
        required: true
        schema:
          type: string
          title: X-Api-Key
      responses:
        '200':
          description: A single Global Cities Directory record.
          content:
            application/json:
              schema: {}
              example:
                data:
                  geonameid: 42
                  name: example
                  country: example
                  subcountry: example
        '404':
          content:
            application/json:
              example:
                error:
                  code: NOT_FOUND
                  message: No Global Cities Directory record for '...'.
          description: Not Found
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError