---
title: "Book For Lead"
method: POST
path: "/api/v1/seller/leads/{lead_id}/consultation"
---

# Book For Lead

`POST /api/v1/seller/leads/{lead_id}/consultation`

## Request

- Base URL: `https://trovastorage.it` (the document declares no server; this is the origin it was published from)
- URL: `https://trovastorage.it/api/v1/seller/leads/{lead_id}/consultation`
- Auth: one of:
  - API key in header `X-Access-Token`
  - HTTP bearer

The store manager books a slot of the lead's own centre, and says how the
appointment will be held.

`book()` decides, exactly as it does for a client: eligibility up here,
availability in the index. The one difference is the notice — sixty minutes
protect the operator from clients, not from themselves.

The client is told twice: a notification on their account, in the same
transaction as the appointment, and the confirmation email after the commit.

## Path parameters

- `lead_id` string, uuid, required

## Request body

- OperatorBookRequest: The store manager books a slot for a lead. No address, no name: the recipient of the confirmation is the lead's own contact, read from the database, so this body cannot be used to send mail anywhere else.
  - `slot_id` string, uuid, required
  - `meeting_type` 'in_person' | 'phone' | 'video_call', required
  - `note` string, nullable

## Response `201`

Successful Response

- LeadDetail
  - `id` string, uuid, required
  - `created_at` string, date-time, required
  - `status` string, required
  - `site_id` string, uuid, nullable, required
  - `site_name` string, nullable, required
  - `size_class_m2` integer, required
  - `interpreted_size_class_m2` integer, required
  - `overridden` boolean, required
  - `free_count` integer, required
  - `zero_results` boolean, required
  - `contact_name` string, nullable, required
  - `appointment_starts_at` string, date-time, nullable, required
  - `appointment_meeting_type` string, nullable
  - `appointment_state` string, nullable
  - `intent` string, nullable
  - `contact_preference` string, nullable
  - `distribution_state` string
  - `entered_by_admin` boolean
  - `size_known` boolean
  - `recipient_id` string, uuid, nullable
  - `state` string
  - `unread` boolean
  - `unread_messages` integer
  - `others_count` integer
  - `direct` boolean
  - `area` string, nullable
  - `offered` boolean
  - `closed_reason` string, nullable
  - `own_centres` OwnCentreRow[]
    - `recipient_id` string, uuid, required
    - `site_name` string, required
    - `state` string, required
  - `origin` string
  - `origin_detail` string, nullable
  - `moved_in` boolean, nullable
  - `contact_released` boolean
  - `original_text` string, required
  - `interpretation` object, required
  - `resolution` SpecialistResolution, required
    - `size_class_m2` integer, required
    - `band_min_m2` number, required
    - `band_max_m2` number, nullable, required
    - `radius_km` number, required
    - `free_count` integer, required
    - `centres` ResolvedCentre[], required
      - `site_id` string, uuid, required
      - `name` string, required
      - `city` string, required
      - `lat` number, required
      - `lng` number, required
      - `distance_km` number, required
      - `free_count` integer, required
      - `operator` string
      - `listing_url` string, nullable
      - `declared` string, nullable
    - `alternatives` ResolvedAlternative[], required
      - `kind` string, required
      - `size_class_m2` integer, required
      - `radius_km` number, required
      - `free_count` integer, required
      - `centres` ResolvedCentre[], required
        - `site_id` string, uuid, required
        - `name` string, required
        - `city` string, required
        - `lat` number, required
        - `lng` number, required
        - `distance_km` number, required
        - `free_count` integer, required
        - `operator` string
        - `listing_url` string, nullable
        - `declared` string, nullable
      - `dropped_features` string[]
    - `zero_results` boolean, required
    - `sites_in_range` integer
    - `coverage` string[]
    - `unavailable_features` string[]
    - `frees_up` ResolvedFreesUp[]
      - `site_id` string, uuid, required
      - `name` string, required
      - `distance_km` number, required
      - `free_from` string, date, required
    - `access_rules` string[]
  - `resolved_at` string, date-time, required
  - `radius_km` number, required
  - `features` string[], required
  - `contact_email` string, nullable, required
  - `contact_phone` string, nullable, required
  - `internal_note` string, nullable, required
  - `consultation` ConsultationResponse, required
    - `id` string, uuid, required
    - `lead_id` string, uuid, required
    - `state` string, required
    - `slot_id` string, uuid, nullable, required
    - `starts_at` string, date-time, nullable, required
    - `duration_min` integer, nullable, required
    - `site_id` string, uuid, nullable, required
    - `site_name` string, nullable, required
    - `preferred_window` string, nullable, required
    - `note` string, nullable, required
    - `contact_name` string, nullable
    - `meeting_type` string, nullable
    - `confirmation_email_status` string, nullable
  - `transcript` object[], required
  - `size_class_options` integer[], required
  - `client_notice` ClientNotice: What the client was told about the action the operator just took. Only on the response to that action: it is a receipt, not a property of the lead.
    - `action` 'confirmed' | 'cancelled', required
    - `email` string, required
    - `notified` boolean, required
  - `other_operators_centres` integer
  - `request_answers` LabelledAnswer[]
    - `question` string, required
    - `answers` string[], required
    - `other` string, nullable
  - `cancel_reason` string, nullable
  - `offer` OfferOut
    - `price_min_cents` integer, required
    - `price_max_cents` integer, nullable, required
    - `price_unit` 'month' | 'week' | 'total', required
    - `message` string, required
    - `created_at` string, date-time, required
  - `messages` ThreadMessageOut[]
    - `id` string, uuid, required
    - `sender` string, required
    - `body` string, required
    - `created_at` string, date-time, required
    - `read` boolean, required
  - `can_respond` boolean
  - `can_decline` boolean
  - `can_message` boolean
  - `can_mark_won` boolean
  - `can_confirm_move_in` boolean
  - `thread_closed` boolean
  - `decline_reason` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/trovastorage/apis/stock-your-inventory.md) · [All operations](https://skmtc.dev/trovastorage/apis/stock-your-inventory/llms.txt) · [OpenAPI document](https://skmtc.dev/trovastorage/apis/stock-your-inventory/revisions/c75f591a585c?raw)
