---
title: "Read an itinerary"
method: GET
path: "/api/v2/itineraries/{externalId}"
tags: ["Itineraries (v2)"]
---

# Read an itinerary

`GET /api/v2/itineraries/{externalId}`

## Request

- Base URL: `https://www.endlesstravelplans.com`
- URL: `https://www.endlesstravelplans.com/api/v2/itineraries/{externalId}`
- Auth: HTTP bearer

The document for the caller: the inputs, the plan with its days, suggested pool, markers and budget, the
latest build, the share state and what the caller may do. The owner, an accepted collaborator and, while
the row is shared by link, any signed-in caller may read it; a private row answers 404. `state` is `draft`
(no plan yet), `generating` (a build is running; `build` carries it), `ready` or `finished`. An activity is
the generator's entry plus the Places fields (`coordinates` to `place_id`) once enrichment found the place; a
suggested pool entry is the generator's entry alone. A marker carries `id`, `category` and `order` once an
edit has recomputed the markers; a plan straight from a build has `lat`, `lng`, `name` and `day` only.

## Response `200`

- object
  - `external_id` string
  - `state` string
  - `plan` object
    - `days` object[]
      - `date` string
      - `day_number` integer
      - `activities` object[]
        - `id` string
        - `name` string
        - `time` string
        - `end_time` string
        - `duration` string
        - `duration_minutes` integer
        - `category` string
        - `rating` number
        - `image` string, nullable
        - `image_search` string
        - `tip` string
        - `price` integer
        - `price_source` string
        - `source` string
        - `is_custom` boolean
        - `coordinates` object
          - `lat` number
          - `lng` number
        - `latitude` number
        - `longitude` number
        - `photo_url` string
        - `opening_hours` string, nullable
        - `google_rating` number
        - `address` string
        - `place_id` string
    - `suggested_pool` object[]
      - `id` string
      - `name` string
      - `time` string
      - `end_time` string
      - `duration` string
      - `duration_minutes` integer
      - `category` string
      - `rating` number
      - `image` string, nullable
      - `image_search` string
      - `tip` string
      - `price` integer
      - `price_source` string, nullable
      - `source` string
      - `is_custom` boolean
    - `markers` object[]
      - `id` string
      - `name` string
      - `lat` number
      - `lng` number
      - `category` string
      - `day` integer
      - `order` integer
    - `budget` object
      - `spent` integer
      - `total` integer
      - `remaining` integer
      - `currency` string
  - `can` object
    - `edit` boolean
    - `share` boolean
    - `export` boolean
    - `generate` boolean
    - `finish` boolean
  - `edit_version` integer

## Other responses

- `401`: unauthenticated: No valid bearer token was sent.
- `404`
- `429`: rate_limited: A throttle or a per-account allowance refused the request; `retry_after` or `remaining` may be present.
- `500`: server_error: Unhandled failure; quote `request_id` to support.

---

[API](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api.md) · [All operations](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api/llms.txt) · [OpenAPI document](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api/revisions/ae82ed3e4a8f?raw)
