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

# List destinations

> Every country and regional bundle with at least one plan on sale,
including a plan count and the cheapest plan's price. Use each
destination's `slug` to filter `/v1/plans`.




## OpenAPI

````yaml /openapi.yaml get /v1/destinations
openapi: 3.0.3
info:
  title: Roamly API
  version: 1.0.0
  description: |
    Programmatic access to Roamly's travel eSIM plan catalog — every
    destination we sell, every plan, with live pricing.

    **Base URL:** `https://api.onroamly.com`

    All endpoints are read-only `GET` requests returning JSON, and require
    an API key sent as `Authorization: Bearer rk_live_…`. Keys are managed
    from your [Roamly account](https://www.onroamly.com/account/api).
  contact:
    name: Roamly
    email: hello@onroamly.com
    url: https://www.onroamly.com
servers:
  - url: https://api.onroamly.com
security:
  - bearerAuth: []
tags:
  - name: Destinations
    description: Countries and regional bundles Roamly sells plans for.
  - name: Plans
    description: The sellable plan catalog.
  - name: eSIMs
    description: >
      eSIMs purchased by your own account. Every key is tied to one Roamly
      account and returns only that account's eSIMs.
paths:
  /v1/destinations:
    get:
      tags:
        - Destinations
      summary: List destinations
      description: |
        Every country and regional bundle with at least one plan on sale,
        including a plan count and the cheapest plan's price. Use each
        destination's `slug` to filter `/v1/plans`.
      operationId: listDestinations
      parameters:
        - $ref: '#/components/parameters/currency'
      responses:
        '200':
          description: All destinations.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Destination'
                  meta:
                    $ref: '#/components/schemas/ListMeta'
              example:
                data:
                  - slug: jp
                    name: Japan
                    type: country
                    flagEmoji: 🇯🇵
                    planCount: 6
                    minPrice:
                      amount: 6.5
                      currency: AUD
                    countries:
                      - JP
                    url: https://www.onroamly.com/explore/jp
                  - slug: asia
                    name: Asia
                    type: region
                    flagEmoji: 🌏
                    planCount: 5
                    minPrice:
                      amount: 9
                      currency: AUD
                    countries:
                      - JP
                      - KR
                      - SG
                      - TH
                      - VN
                    url: https://www.onroamly.com/explore/asia
                meta:
                  count: 2
                  currency: AUD
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    currency:
      name: currency
      in: query
      required: false
      description: |
        Currency for prices. `AUD` (default) is what checkout charges;
        `USD` is converted at a fixed reference rate for display and may
        differ slightly from card-statement amounts.
      schema:
        type: string
        enum:
          - AUD
          - USD
        default: AUD
  schemas:
    Destination:
      type: object
      properties:
        slug:
          type: string
          description: >-
            Stable identifier; also the path segment of the destination's page
            on onroamly.com.
          example: jp
        name:
          type: string
          example: Japan
        type:
          type: string
          enum:
            - country
            - region
        flagEmoji:
          type: string
          example: 🇯🇵
        planCount:
          type: integer
          description: Number of plans currently on sale.
          example: 6
        minPrice:
          $ref: '#/components/schemas/Money'
        countries:
          type: array
          description: >-
            ISO 3166-1 alpha-2 codes covered — the country itself, or every
            country a regional bundle covers.
          items:
            type: string
          example:
            - JP
        url:
          type: string
          format: uri
          example: https://www.onroamly.com/explore/jp
    ListMeta:
      type: object
      properties:
        count:
          type: integer
          example: 42
        currency:
          type: string
          enum:
            - AUD
            - USD
          example: AUD
    Money:
      type: object
      properties:
        amount:
          type: number
          format: float
          example: 14.5
        currency:
          type: string
          enum:
            - AUD
            - USD
          example: AUD
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: not_found
            message:
              type: string
              example: Unknown route.
  responses:
    Unauthorized:
      description: Missing, malformed, unknown, or revoked API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: missing_api_key
              message: 'Provide your API key as ''Authorization: Bearer rk_live_…''.'
    RateLimited:
      description: Rate limit exceeded (120 requests/minute per key).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: rate_limited
              message: Rate limit exceeded (120 requests/minute per key).
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Your Roamly API key, e.g. `Authorization: Bearer rk_live_…`'

````