---
title: "Read a budget"
method: GET
path: "/api/v2/budgets/{externalId}"
tags: ["Budgets (v2)"]
---

# Read a budget

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

## Request

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

`status` is `draft` or `finished`. `pricing.status` is `unpriced` (no lines yet), `pending` or `processing`
(a run is on), `completed`, `failed` (`pricing.error` says why) or `stale` (lines exist but the inputs
changed since). `lines[]` are the priced rows: `key`, `group`, `label`, `basis`, `qty`, `unit`, money fields
`amount`, `amount_low`, `amount_high`, `user_amount` (the person's override or null) and `effective_amount`
(what counts), `optional`, `enabled`, `source` {class, label, url, verified_at, confidence} and `native`.
`groups[]` carry the per group totals; `totals` is null until the budget has lines.

## Response `200`

- object
  - `external_id` string
  - `status` string
  - `is_owner` boolean
  - `trip_type` string
  - `currency` string
  - `fx_rate` string, nullable
  - `contingency_pct` integer
  - `checked_at` string
  - `pricing` object
    - `status` string
    - `error` string, nullable
    - `version` integer
    - `update_on_offer` boolean
  - `lines` object[]
    - `key` string
    - `group` string
    - `label` string
    - `basis` string
    - `qty` integer
    - `unit` string
    - `amount` object
      - `amount` string
      - `currency` string
    - `amount_low` object
      - `amount` string
      - `currency` string
    - `amount_high` object
      - `amount` string
      - `currency` string
    - `user_amount` string, nullable
    - `effective_amount` object
      - `amount` string
      - `currency` string
    - `optional` boolean
    - `enabled` boolean
    - `source` object
      - `class` string
      - `label` string
      - `url` string, nullable
      - `verified_at` string
      - `confidence` number
    - `native` string, nullable
  - `groups` object[]
    - `key` string
    - `label` string
    - `icon` string
    - `totals` object
      - `point` object
        - `amount` string
        - `currency` string
      - `low` object
        - `amount` string
        - `currency` string
      - `high` object
        - `amount` string
        - `currency` string
  - `totals` object
    - `subtotal` object
      - `amount` string
      - `currency` string
    - `contingency` object
      - `amount` string
      - `currency` string
    - `plan_for` object
      - `amount` string
      - `currency` string
    - `likely_low` object
      - `amount` string
      - `currency` string
    - `likely_high` object
      - `amount` string
      - `currency` string
  - `is_shared` boolean
  - `share_token` string, nullable
  - `trip` object
    - `external_id` string
    - `needs_choice` boolean
    - `candidates` unknown[]
      - unknown

## Other responses

- `401`: unauthenticated: No valid bearer token was sent.
- `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)
