---
title: "Confirm floors / elevator / stairs / carry distance for both ends."
method: POST
path: "/jobs/{id}/access"
---

# Confirm floors / elevator / stairs / carry distance for both ends.

`POST /jobs/{id}/access`

## Request

- Base URL: `https://widget.reelquoteai.com/api/v1`
- URL: `https://widget.reelquoteai.com/api/v1/jobs/{id}/access`
- Auth: HTTP bearer

## Request body

- object
  - `origin` AccessAnswers: What a customer can actually answer about one end. Only these fields are writable; inferred values are kept.
    - `floor` integer: 0–199
    - `elevator` boolean
    - `stairs_flights` integer: 0–30
    - `parking_to_door_ft` integer: 0–2000
  - `destination` AccessAnswers: What a customer can actually answer about one end. Only these fields are writable; inferred values are kept.
    - `floor` integer: 0–199
    - `elevator` boolean
    - `stairs_flights` integer: 0–30
    - `parking_to_door_ft` integer: 0–2000
  - `move_date` string, date, nullable: YYYY-MM-DD

## Response `200`

Re-priced

- object
  - `job_id` string
  - `access` object
    - `origin` AccessProfile: One end of the move as the system holds it: what was inferred, and what the customer confirmed. Both survive, so inferred-vs-confirmed is measurable.
      - `address` string, nullable
      - `unit` string, nullable
      - `place_id` string, nullable
      - `dwelling` 'apartment' | 'condo' | 'townhouse' | 'house' | 'storage', nullable
      - `floor_inferred` integer, nullable: Read off the unit number; null when it could not be
      - `floor_confirmed` integer, nullable: What the customer confirmed via /access
      - `elevator` boolean, nullable: null = not yet answered
      - `elevator_suggested` boolean: true when the inferred floor makes an elevator likely; a UI pre-checks the box
      - `stairs_flights` integer, nullable
      - `parking_to_door_ft` integer, nullable: Carry distance from where a truck can park
      - `access_confirmed_at` string, date-time, nullable
    - `destination` AccessProfile: One end of the move as the system holds it: what was inferred, and what the customer confirmed. Both survive, so inferred-vs-confirmed is measurable.
      - `address` string, nullable
      - `unit` string, nullable
      - `place_id` string, nullable
      - `dwelling` 'apartment' | 'condo' | 'townhouse' | 'house' | 'storage', nullable
      - `floor_inferred` integer, nullable: Read off the unit number; null when it could not be
      - `floor_confirmed` integer, nullable: What the customer confirmed via /access
      - `elevator` boolean, nullable: null = not yet answered
      - `elevator_suggested` boolean: true when the inferred floor makes an elevator likely; a UI pre-checks the box
      - `stairs_flights` integer, nullable
      - `parking_to_door_ft` integer, nullable: Carry distance from where a truck can park
      - `access_confirmed_at` string, date-time, nullable
    - `flags` string[]
  - `quote` Quote: A priced quote. bookable=false means a ballpark range; only bookable quotes can be booked. The key kind decides the view. A publishable key — it sits in the mover's page source — receives the customer view: each line's label, amount, hours, crew and miles, the overage rate, the assumptions and the inputs. A secret key also receives the rate behind each line, applied_rules, subtotal_cents, minimum_charge_cents, rate_card_id, rate_card_name and engine_version.
    - `kind` 'ballpark' | 'firm', required
    - `bookable` boolean, required: true only for a firm quote built from a filmed inventory. Gate any booking action on this flag, never on kind.
    - `currency` string, required: ISO 4217
    - `units` string: Measurement system for volumes and distances
    - `crew` integer, required: Movers on the job
    - `labour_hours` number, required: Billable hours at the home(s)
    - `overage` object: Disclosed on every quote: what an hour past the estimate costs.
      - `label` string
      - `hourly_cents` integer: Rate for time beyond the estimate, in integer cents. Currency travels beside it — never assume USD.
      - `same_as_hourly` boolean
    - `buckets` object, required: The price, line by line.
      - `labour` Bucket: One line of the price: a label and an amount. Labour lines also carry hours and crew; truck legs carry miles.
        - `label` string: Plain-language line name
        - `cents` integer: This line, in integer cents. Currency travels beside it — never assume USD.
      - `move_leg_time` Bucket: One line of the price: a label and an amount. Labour lines also carry hours and crew; truck legs carry miles.
        - `label` string: Plain-language line name
        - `cents` integer: This line, in integer cents. Currency travels beside it — never assume USD.
      - `deadhead_leg_time` Bucket: One line of the price: a label and an amount. Labour lines also carry hours and crew; truck legs carry miles.
        - `label` string: Plain-language line name
        - `cents` integer: This line, in integer cents. Currency travels beside it — never assume USD.
      - `truck_move_leg` Bucket: One line of the price: a label and an amount. Labour lines also carry hours and crew; truck legs carry miles.
        - `label` string: Plain-language line name
        - `cents` integer: This line, in integer cents. Currency travels beside it — never assume USD.
      - `truck_deadhead_leg` Bucket: One line of the price: a label and an amount. Labour lines also carry hours and crew; truck legs carry miles.
        - `label` string: Plain-language line name
        - `cents` integer: This line, in integer cents. Currency travels beside it — never assume USD.
      - `travel_flat` Bucket: One line of the price: a label and an amount. Labour lines also carry hours and crew; truck legs carry miles.
        - `label` string: Plain-language line name
        - `cents` integer: This line, in integer cents. Currency travels beside it — never assume USD.
      - `access_origin` Bucket: One line of the price: a label and an amount. Labour lines also carry hours and crew; truck legs carry miles.
        - `label` string: Plain-language line name
        - `cents` integer: This line, in integer cents. Currency travels beside it — never assume USD.
      - `access_destination` Bucket: One line of the price: a label and an amount. Labour lines also carry hours and crew; truck legs carry miles.
        - `label` string: Plain-language line name
        - `cents` integer: This line, in integer cents. Currency travels beside it — never assume USD.
    - `applied_rules` object[]: Date and seasonal rules that fired, in order. Empty when none did.
      - `rule` string: Rule name from the mover's rate card, e.g. weekend, month_end
      - `mult` number, nullable: Multiplier, when the rule is one
      - `add_cents` integer, nullable: Flat addition, when the rule is one, in integer cents. Currency travels beside it — never assume USD.
      - `delta_cents` integer: What the rule changed the total by, in integer cents. Currency travels beside it — never assume USD.
    - `subtotal_cents` integer: Before date rules and the minimum charge, in integer cents. Currency travels beside it — never assume USD.
    - `minimum_charge_cents` integer: The mover's floor, in integer cents. Currency travels beside it — never assume USD.
    - `minimum_charge_applied` boolean: true when the floor lifted the total
    - `total_cents` integer, nullable, required: The price. null on a ballpark — use low_cents / high_cents, in integer cents. Currency travels beside it — never assume USD.
    - `low_cents` integer: Ballpark only: low end of the range, in integer cents. Currency travels beside it — never assume USD.
    - `high_cents` integer: Ballpark only: high end of the range, in integer cents. Currency travels beside it — never assume USD.
    - `inputs` object: What the price was computed from — pinned on the job, so a later rate-card change can never reprice history. A ballpark adds the home size (dwelling) and its volume range (cuft_low, cuft_high).
      - `cuft` number: Volume priced
      - `weight_lbs` integer
      - `distance_miles` number, nullable
      - `duration_minutes` number, nullable: Routed drive time, when a route was found
      - `move_date` string, date, nullable: YYYY-MM-DD
    - `assumptions` string[], required: Plain-language caveats. Show these to the human.
    - `rate_card_id` string: The mover's rate card this was priced from
    - `rate_card_name` string
    - `engine_version` string: Pricing engine version
  - `steps` PriceSteps: How far the inventory can move before the price does — the honest answer to 'what if I add the piano'.
    - `up` object, nullable: The nearest price break in one direction; null when none is close.
      - `cuft_delta` number: Cubic feet added (up) or removed (down) before the price changes
      - `total_cents` integer: The price at that point, in integer cents. Currency travels beside it — never assume USD.
      - `crew` integer
      - `labour_hours` number
    - `down` object, nullable: The nearest price break in one direction; null when none is close.
      - `cuft_delta` number: Cubic feet added (up) or removed (down) before the price changes
      - `total_cents` integer: The price at that point, in integer cents. Currency travels beside it — never assume USD.
      - `crew` integer
      - `labour_hours` number
  - `terms` Terms
    - `included` string, nullable: What the mover includes, in their words
    - `terms` string, nullable: The mover's terms, in their words
    - `frozen` boolean: false = live text; true = the snapshot the customer accepted at booking
    - `accepted_at` string, date-time, nullable: Only on a frozen copy

## Other responses

- `400`: `invalid_request` — A field is missing, malformed or not allowed in this state. `message` says which. `secret_key_in_url` — A secret key was sent as `?k=`. Secret keys go in the Authorization header only.
- `401`: `unauthorized` — No key, an unknown key, or a revoked key.
- `404`: `not_found` — No such job for this key, or no such endpoint.
- `429`: `rate_limited` — Per-key limit (60/min publishable, 300/min secret), the mover's daily ballpark or video-analysis cap, or a visitor's daily catalog-search cap. Obey `Retry-After`. Carries `Retry-After` in seconds.

---

[API](https://skmtc.dev/reelquoteai/apis/reelquoteai-us-api.md) · [All operations](https://skmtc.dev/reelquoteai/apis/reelquoteai-us-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reelquoteai/apis/reelquoteai-us-api/revisions/56c304752192?raw)
