> ## Documentation Index
> Fetch the complete documentation index at: https://knowledge.bitbybit.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# List cities

> Return cities for the chosen provider.

- **KiriminAja** (`provider=kirimin_aja`, requires `provinceId`): returns the KA city dictionary for that province with `cityId` you can feed into `/coverage/districts`.
- **RideBlitz** (`provider=ride_blitz`): returns the 46 hard-coded allowed pickup cities. `provinceId` is ignored. Use one of these values as `options.pickupCity` when calling `/shipping/calculate-fee`.



## OpenAPI

````yaml GET /shipping/coverage/cities
openapi: 3.1.0
info:
  title: bitbybit Open API — Shipping
  description: >-
    Programmatic access to bitbybit shipping: store locations, provider
    discovery, coverage lookup, fee quoting, and the full shipment lifecycle
    (create, book, update, cancel, track) across GoSend, KiriminAja, and
    RideBlitz.
  version: 1.0.0
  contact:
    name: bitbybit Support
    url: https://bitbybit.studio
servers:
  - url: https://api.bitbybit.studio/customer/api/open/v1
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Store Locations
    description: >-
      Manage warehouse / pickup origin addresses. Couriers pick up from these
      locations when a shipment is booked.
  - name: Providers
    description: Discover connected carriers and the services each carrier offers.
  - name: Coverage
    description: >-
      Look up the courier-specific province / city / district / sub-district
      dictionaries needed to populate addresses and quote fees.
  - name: Fee Calculation
    description: Quote shipping fees across carriers using one unified request shape.
  - name: Shipments
    description: >-
      Create, update, cancel, and track shipments. A shipment is always attached
      to an Order.
paths:
  /shipping/coverage/cities:
    get:
      tags:
        - Coverage
      summary: List cities
      description: >-
        Return cities for the chosen provider.


        - **KiriminAja** (`provider=kirimin_aja`, requires `provinceId`):
        returns the KA city dictionary for that province with `cityId` you can
        feed into `/coverage/districts`.

        - **RideBlitz** (`provider=ride_blitz`): returns the 46 hard-coded
        allowed pickup cities. `provinceId` is ignored. Use one of these values
        as `options.pickupCity` when calling `/shipping/calculate-fee`.
      operationId: getCoverageCities
      parameters:
        - name: provider
          in: query
          schema:
            type: string
            enum:
              - kirimin_aja
              - ride_blitz
            default: kirimin_aja
        - name: provinceId
          in: query
          schema:
            type: integer
          description: >-
            Required when `provider=kirimin_aja`. Get it from `GET
            /shipping/coverage/provinces`.
      responses:
        '200':
          description: Cities list. Shape varies by provider — see examples.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        cityId:
                          type: integer
                        cityName:
                          type: string
                        cityType:
                          type: string
                        provinceId:
                          type: integer
              examples:
                kiriminAja:
                  summary: KiriminAja cities for province 31
                  value:
                    data:
                      - cityId: 3171
                        cityName: Jakarta Pusat
                        cityType: Kota
                        provinceId: 31
                      - cityId: 3172
                        cityName: Jakarta Utara
                        cityType: Kota
                        provinceId: 31
                rideBlitz:
                  summary: RideBlitz allowed pickup cities (truncated)
                  value:
                    data:
                      - cityName: Kota Jakarta Barat
                      - cityName: Kota Jakarta Pusat
                      - cityName: Kota Bandung
                      - cityName: Kota Denpasar
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  responses:
    ValidationError:
      description: Request validation failed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: VALIDATION_ERROR
              message: origin.districtId is required for KiriminAja Express
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: UNAUTHORIZED
              message: Invalid API key
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: >-
                Machine-readable code, e.g. `VALIDATION_ERROR`, `NOT_FOUND`,
                `INTEGRATION_NOT_CONNECTED`, `PROVIDER_ERROR`, `BOOKING_FAILED`.
            message:
              type: string
              description: Human-readable error message.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key for authentication. Create one in Settings > Developer. The key
        must have the `BITCRM` product scope and an `orders` resource scope;
        required action depends on the endpoint (`READ`, `WRITE`, or `DELETE`).

````