{"openapi":"3.1.0","info":{"title":"Moveroo public quote API","version":"2026-06-30","description":"Official host-aware public API for customer-authorised household removals and vehicle transport quote submissions."},"servers":[{"url":"https:\/\/quoting.removalsinterstate.com.au"}],"externalDocs":{"description":"Official public agent quote API guide","url":"https:\/\/quoting.removalsinterstate.com.au\/agents"},"paths":{"\/api\/v1\/estimate-volume":{"post":{"summary":"Estimate household move volume","description":"Returns a deterministic cubic metre estimate from customer-authorised inventory text, structured items, and optional dwelling profile. This is an estimate for quote preparation, not a guaranteed final cubing result.","operationId":"estimateHouseholdMoveVolume","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/EstimateVolumeRequest"}}}},"responses":{"200":{"description":"Volume estimate with confidence, assumptions, and household quote submit next step.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/EstimateVolumeResponse"}}}},"404":{"description":"This host does not expose the public quote capability manifest."},"422":{"description":"Validation failed. Check consent, origin_domain, and inventory or dwelling input."},"429":{"description":"Rate limited. Retry later."}}}},"\/api\/v1\/household-quotes\/assistant\/submit":{"post":{"summary":"Submit a household removals quote request","description":"Creates a host-aware household quote entry for staff review. Requires customer consent fields and does not require a customer login.","operationId":"submitHouseholdQuote","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/HouseholdQuoteSubmission"}}}},"responses":{"200":{"description":"Duplicate or idempotent submission accepted."},"201":{"description":"Quote submission accepted."},"422":{"description":"Validation failed. Check required fields, consent, conditional requirements, and any locality suggestions returned for ambiguous vehicle pickup or delivery locations."},"429":{"description":"Rate limited. Retry later with the same idempotency key where possible."}}}},"\/api\/v1\/vehicle-quotes\/assistant\/submit":{"post":{"summary":"Submit a vehicle transport quote request","description":"Creates a host-aware vehicle quote request using the current vehicle workflow. Requires customer consent fields and does not require a customer login.","operationId":"submitVehicleQuote","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VehicleQuoteSubmission"}}}},"responses":{"200":{"description":"Duplicate or idempotent submission accepted."},"201":{"description":"Quote submission accepted."},"422":{"description":"Validation failed. Check required fields, consent, conditional requirements, and any locality suggestions returned for ambiguous vehicle pickup or delivery locations."},"429":{"description":"Rate limited. Retry later with the same idempotency key where possible."}}}},"\/api\/v1\/vehicle-quotes\/assistant\/intake\/session":{"get":{"summary":"Discover the vehicle quote intake workflow for this host","description":"Returns host-aware vehicle quote workflow capabilities and endpoint paths. Use the intake workflow when a complete one-shot vehicle quote payload is not yet available.","operationId":"vehicleQuoteIntakeSession","responses":{"200":{"description":"Vehicle quote intake workflow is available for this host."},"404":{"description":"This host does not expose the public quote capability manifest."},"422":{"description":"This host could not be resolved to one active vehicle quote tenant."}}}},"\/api\/v1\/vehicle-quotes\/assistant\/intake\/{action}":{"post":{"summary":"Continue a vehicle quote intake workflow","description":"Server-held multi-step vehicle quote intake for public agents, chat, and voice adapters. Supported actions are message, contact, category, pickup, delivery, vehicle, vehicle-detail, drivable, dimension-check, confirm, summary, and submit. Customer consent is required only on submit.","operationId":"vehicleQuoteIntakeAction","parameters":[{"name":"action","in":"path","required":true,"schema":{"type":"string","enum":["message","contact","category","pickup","delivery","vehicle","vehicle-detail","drivable","dimension-check","confirm","summary","submit"]}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VehicleQuoteIntakeAction"}}}},"responses":{"200":{"description":"Workflow state, next step, messages, and any suggestions or submission result."},"403":{"description":"Draft session token is missing or invalid."},"422":{"description":"Validation failed or a clarification is required."},"429":{"description":"Rate limited. Retry later with the same draft\/session details where possible."}}}},"\/api\/v1\/vehicle-quotes\/results\/actions":{"post":{"summary":"Find public vehicle quote result actions","description":"Looks up customer-safe vehicle quote result actions. Email-only lookup returns quote choices; full result actions require quote_reference plus the matching customer email.","operationId":"vehicleQuoteResultActions","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VehicleQuoteResultsActionsRequest"}}}},"responses":{"200":{"description":"Customer-safe quote choices or result actions."},"404":{"description":"This host does not expose the public vehicle quote result capability."},"422":{"description":"Validation failed. Check consent, origin_domain, email verification, and quote reference."},"429":{"description":"Rate limited. Retry later."}}}},"\/api\/v1\/vehicle-quotes\/results\/book-option":{"post":{"summary":"Submit a selected vehicle quote booking request","description":"Submits a customer-authorised booking continuation for a selected vehicle quote option. Requires a current confirmation fingerprint and idempotency key. No payment details are accepted by this API.","operationId":"bookVehicleQuoteOption","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VehicleQuoteBookingRequest"}}}},"responses":{"200":{"description":"Booking request accepted or idempotent retry returned."},"404":{"description":"Quote not found for the supplied email\/reference."},"409":{"description":"The selected option or confirmation fingerprint must be refreshed."},"422":{"description":"Validation failed or the quote is not currently bookable."},"429":{"description":"Rate limited. Retry later with the same idempotency key where possible."}}}},"\/api\/v1\/household-quotes\/booking\/actions":{"post":{"summary":"Find household booking actions for a priced quote","description":"Looks up customer-safe household quote booking actions. Agents may supply quote_reference plus customer email or phone, or an email-only lookup that returns safe quote choices before any booking details are disclosed.","operationId":"householdBookingActions","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/HouseholdBookingActionsRequest"}}}},"responses":{"200":{"description":"Booking action, confirmation, duplicate, or booking request response."},"404":{"description":"Quote or email-only match not found for this host and verification context."},"409":{"description":"The quote details changed and the selected option must be reconfirmed."},"422":{"description":"Validation failed, the option is unavailable, or the quote is not currently bookable."},"429":{"description":"Rate limited. Retry later with the same idempotency key where possible."}}}},"\/api\/v1\/household-quotes\/booking\/confirm-option":{"post":{"summary":"Confirm a household quote option before booking","description":"Returns the customer-safe confirmation snapshot and fingerprint that must be supplied to book the selected household quote option.","operationId":"confirmHouseholdBookingOption","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/HouseholdBookingConfirmRequest"}}}},"responses":{"200":{"description":"Booking action, confirmation, duplicate, or booking request response."},"404":{"description":"Quote or email-only match not found for this host and verification context."},"409":{"description":"The quote details changed and the selected option must be reconfirmed."},"422":{"description":"Validation failed, the option is unavailable, or the quote is not currently bookable."},"429":{"description":"Rate limited. Retry later with the same idempotency key where possible."}}}},"\/api\/v1\/household-quotes\/booking\/book-option":{"post":{"summary":"Submit a household booking request","description":"Submits a customer-authorised household booking request for a selected priced option. No payment is collected through this API.","operationId":"bookHouseholdQuoteOption","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/HouseholdBookingRequest"}}}},"responses":{"200":{"description":"Booking action, confirmation, duplicate, or booking request response."},"404":{"description":"Quote or email-only match not found for this host and verification context."},"409":{"description":"The quote details changed and the selected option must be reconfirmed."},"422":{"description":"Validation failed, the option is unavailable, or the quote is not currently bookable."},"429":{"description":"Rate limited. Retry later with the same idempotency key where possible."}}}},"\/api\/v1\/callbacks\/assistant\/request":{"post":{"summary":"Request a callback time","description":"Books a host-aware callback appointment using the same callback availability as the public contact page. Requires customer consent fields and does not require a customer login.","operationId":"requestCallbackTime","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CallbackRequest"}}}},"responses":{"200":{"description":"Duplicate or idempotent callback request accepted."},"201":{"description":"Callback appointment booked."},"404":{"description":"This host does not expose the public callback capability."},"422":{"description":"Validation failed. Check consent, customer details, origin domain, and whether the selected callback slot is still available."},"429":{"description":"Rate limited. Retry later with the same idempotency key where possible."}}}},"\/api\/v1\/callbacks\/assistant\/slots":{"get":{"summary":"List available callback times","description":"Returns the currently selectable callback appointment slots for this approved host.","operationId":"listCallbackTimes","responses":{"200":{"description":"Available callback slot groups.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CallbackSlotsResponse"}}}},"404":{"description":"This host does not expose the public callback capability."},"429":{"description":"Rate limited. Retry later."}}}},"\/api\/v1\/customer-assistant\/support\/answer":{"post":{"summary":"Answer a generic Customer Assistant support question","description":"Returns a customer-safe support answer from active approved FAQ entries. Close matches can return status=suggested and should be shown as tentative with feedback options. Draft, proposed, and archived FAQ entries are never customer-visible.","operationId":"answerCustomerAssistantSupportQuestion","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerAssistantSupportAnswerRequest"}}}},"responses":{"200":{"description":"Approved FAQ answer or bounded fallback.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerAssistantSupportAnswerResponse"}}}},"422":{"description":"Validation failed. Supply a bounded question string."},"429":{"description":"Rate limited. Retry later."}}}},"\/api\/v1\/customer-assistant\/support\/feedback":{"post":{"summary":"Record Customer Assistant support suggestion feedback","description":"Records whether a suggested approved FAQ answer helped. did_not_help creates unanswered-question review evidence with optional conversation context for staff or approved-agent FAQ improvement.","operationId":"recordCustomerAssistantSupportFeedback","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerAssistantSupportFeedbackRequest"}}}},"responses":{"200":{"description":"Feedback accepted and, when relevant, unanswered-question evidence captured.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerAssistantSupportFeedbackResponse"}}}},"422":{"description":"Validation failed. Supply question, outcome, and only active FAQ ids when provided."},"429":{"description":"Rate limited. Retry later."}}}}},"components":{"schemas":{"CustomerConsent":{"type":"object","required":["confirmed","basis"],"properties":{"confirmed":{"type":"boolean","const":true,"description":"Must be true when the customer has asked the agent to request a quote."},"basis":{"type":"string","enum":["customer_requested_quote"]}}},"CallbackConsent":{"type":"object","required":["confirmed","basis"],"properties":{"confirmed":{"type":"boolean","const":true,"description":"Must be true when the customer has asked the agent to request a callback."},"basis":{"type":"string","enum":["customer_requested_callback"]}}},"LeadAttribution":{"type":"object","additionalProperties":false,"description":"Optional cross-domain marketing lead attribution supplied by controlled marketing sites or approved agents. Values are untrusted, bounded, and never treated as customer identity.","properties":{"lead_intent_id":{"type":"string","maxLength":120,"pattern":"^[A-Za-z0-9._:-]+$"},"source_site":{"type":"string","maxLength":255,"description":"Marketing hostname that generated the lead intent."},"source_path":{"type":"string","maxLength":512,"description":"Marketing path only; query strings and PII are stripped before storage."},"intent_type":{"type":"string","enum":["quote_household","quote_vehicle","booking_household","contact"]}}},"BookingConsent":{"type":"object","required":["confirmed","basis"],"properties":{"confirmed":{"type":"boolean","const":true,"description":"Must be true when the customer has asked the agent to book a priced household quote option."},"basis":{"type":"string","enum":["customer_requested_booking"]}}},"VehicleResultsConsent":{"type":"object","required":["confirmed","basis"],"properties":{"confirmed":{"type":"boolean","const":true,"description":"Must be true when the customer has asked the agent to look up vehicle quote result actions."},"basis":{"type":"string","enum":["customer_requested_vehicle_results"]}}},"VehicleBookingConsent":{"type":"object","required":["confirmed","basis"],"properties":{"confirmed":{"type":"boolean","const":true,"description":"Must be true when the customer has asked the agent to continue booking a selected vehicle quote option."},"basis":{"type":"string","enum":["customer_requested_vehicle_booking"]}}},"Customer":{"type":"object","required":["name","email","phone"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"}}},"Location":{"type":"object","properties":{"city":{"type":"string"},"state":{"type":"string"},"postcode":{"type":"string"},"locality_id":{"type":"integer"}},"description":"Supply either city\/state\/postcode style fields or a known locality_id. Vehicle quote submissions can auto-confirm strong locality matches and may return suggestions when a pickup or delivery locality is ambiguous."},"EstimateVolumeRequest":{"type":"object","required":["origin_domain","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The approved quote host handling this request. Must match the request host."},"customer_consent":{"$ref":"#\/components\/schemas\/CustomerConsent"},"inventory_text":{"type":"string","description":"Natural-language inventory or move scope supplied by the customer."},"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"string"},"quantity":{"type":"integer","minimum":1},"volume_m3":{"type":"number","minimum":0}}}},"dwelling":{"type":"object","properties":{"bedrooms":{"type":"integer","minimum":0,"maximum":8},"property_type":{"type":"string","enum":["house","apartment","unit","townhouse","storage","garage","office","other"]}}}},"anyOf":[{"required":["inventory_text"]},{"required":["items"]},{"required":["dwelling"]}]},"EstimateVolumeResponse":{"type":"object","required":["estimated_m3","confidence","method","assumptions","quote_next_step"],"properties":{"estimated_m3":{"type":"number","description":"Estimated cubic metres rounded to one decimal place."},"confidence":{"type":"number","minimum":0,"maximum":1},"method":{"type":"string"},"assumptions":{"type":"array","items":{"type":"string"}},"matched_items":{"type":"array","items":{"type":"object"}},"unmatched_lines":{"type":"array","items":{"type":"string"}},"ambiguous_lines":{"type":"array","items":{"type":"string"}},"quote_next_step":{"type":"object","properties":{"endpoint":{"type":"string","const":"\/api\/v1\/household-quotes\/assistant\/submit"},"use_estimate_as":{"type":"string"},"payload_hint":{"type":"object"},"required_fields":{"type":"array","items":{"type":"string"}}}}}},"CustomerAssistantSupportAnswerRequest":{"type":"object","required":["question"],"properties":{"question":{"type":"string","maxLength":500},"origin_domain":{"type":"string"},"channel":{"type":"string"},"surface":{"type":"string"},"conversation":{"type":"array","maxItems":40,"items":{"type":"object","required":["role","text"],"properties":{"role":{"type":"string","maxLength":40},"text":{"type":"string","maxLength":2000},"kind":{"type":"string","maxLength":80}}}}}},"CustomerAssistantSupportAnswerResponse":{"type":"object","required":["ok","status","matched","answer","source","source_label","actions","guidance","learning"],"properties":{"ok":{"type":"boolean"},"status":{"type":"string","enum":["answered","suggested","fallback"]},"matched":{"type":"boolean"},"answer":{"type":"string"},"source":{"type":"string","enum":["approved_faq","approved_faq_suggestion","approved_faq_fallback"]},"source_label":{"type":"string"},"topic":{"type":["object","null"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"category":{"type":"string"},"reviewed_at":{"type":["string","null"],"format":"date-time"}}},"suggestion":{"type":["object","null"],"properties":{"suggested_faq_id":{"type":["integer","null"]},"score":{"type":["number","null"]},"reason":{"type":["string","null"]},"feedback_endpoint":{"type":"string"},"feedback_options":{"type":"array","items":{"type":"string","enum":["helped","did_not_help"]}}}},"actions":{"type":"array","items":{"type":"object"}},"guidance":{"type":"object"},"learning":{"type":"object","required":["captured_unanswered_question","feedback_endpoint"],"properties":{"captured_unanswered_question":{"type":"boolean"},"feedback_endpoint":{"type":"string"}}}}},"CustomerAssistantSupportFeedbackRequest":{"type":"object","required":["question","outcome"],"properties":{"question":{"type":"string","maxLength":500},"outcome":{"type":"string","enum":["helped","did_not_help"]},"suggested_faq_id":{"type":"integer","description":"Active approved FAQ id returned by support\/answer suggestion.suggested_faq_id."},"suggested_score":{"type":"number","minimum":0,"maximum":1},"suggested_reason":{"type":"string","maxLength":120},"origin_domain":{"type":"string"},"channel":{"type":"string"},"surface":{"type":"string"},"conversation":{"type":"array","maxItems":40,"items":{"type":"object","required":["role","text"],"properties":{"role":{"type":"string","maxLength":40},"text":{"type":"string","maxLength":2000},"kind":{"type":"string","maxLength":80}}}}}},"CustomerAssistantSupportFeedbackResponse":{"type":"object","required":["ok","recorded_feedback","captured_unanswered_question","message"],"properties":{"ok":{"type":"boolean"},"recorded_feedback":{"type":"boolean"},"captured_unanswered_question":{"type":"boolean"},"unanswered_question_id":{"type":["integer","null"]},"message":{"type":"string"}}},"HouseholdQuoteSubmission":{"type":"object","required":["origin_domain","customer","pickup","delivery","move_date","inventory","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The quote host where the customer journey originated."},"tenant":{"type":"string","description":"Optional. Omit tenant for public host-aware submissions unless Moveroo has supplied a tenant slug."},"idempotency_key":{"type":"string","description":"Optional stable key supplied by the agent. If omitted, Moveroo computes a quote-type-specific fingerprint."},"customer_consent":{"$ref":"#\/components\/schemas\/CustomerConsent"},"lead_attribution":{"$ref":"#\/components\/schemas\/LeadAttribution"},"customer":{"$ref":"#\/components\/schemas\/Customer"},"pickup":{"$ref":"#\/components\/schemas\/Location"},"delivery":{"$ref":"#\/components\/schemas\/Location"},"move_date":{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["exact","asap","unknown","vague"]},"date":{"type":"string","format":"date"}}},"inventory":{"type":"object","required":["method"],"properties":{"method":{"type":"string","enum":["m3","pasted_list","unknown"]},"cubic_meters":{"type":"number"},"text":{"type":"string"}}},"channel":{"type":"string"},"surface":{"type":"string"},"notes":{"type":"string"}}},"HouseholdBookingActionsRequest":{"type":"object","required":["origin_domain","verification","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The approved quote request host. It must match the request host; stored quote origins may match another approved host alias on the same resolved tenant."},"quote_reference":{"type":"string","description":"Optional for email-only lookup; required to return full booking actions for one quote."},"verification":{"type":"string","description":"Customer email or phone for the quote being booked. Email-only lookup returns safe quote choices first."},"tenant":{"type":"string","description":"Optional. Omit tenant for public host-aware booking lookups unless Moveroo has supplied a tenant slug."},"customer_consent":{"$ref":"#\/components\/schemas\/BookingConsent"}}},"HouseholdBookingConfirmRequest":{"type":"object","required":["origin_domain","quote_reference","verification","option_id","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The approved quote request host. It must match the request host; stored quote origins may match another approved host alias on the same resolved tenant."},"quote_reference":{"type":"string"},"verification":{"type":"string","description":"Customer email or phone for the quote being booked."},"option_id":{"type":"string"},"booking_contact_phone":{"type":"string","description":"Required when the stored quote phone is missing, invalid, or placeholder-like. This is contact data for the booking; email remains the quote verification proof."},"customer_consent":{"$ref":"#\/components\/schemas\/BookingConsent"}}},"HouseholdBookingRequest":{"type":"object","required":["origin_domain","quote_reference","verification","option_id","expected_fingerprint","idempotency_key","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The approved quote request host. It must match the request host; stored quote origins may match another approved host alias on the same resolved tenant."},"quote_reference":{"type":"string"},"verification":{"type":"string","description":"Customer email or phone for the quote being booked."},"option_id":{"type":"string"},"expected_fingerprint":{"type":"string","minLength":64,"maxLength":64},"idempotency_key":{"type":"string","description":"Required stable key so retrying the same booking request cannot create duplicate bookings."},"booking_contact_phone":{"type":"string","description":"Required when the stored quote phone is missing, invalid, or placeholder-like. This is saved as the booking contact phone after quote verification succeeds."},"customer_consent":{"$ref":"#\/components\/schemas\/BookingConsent"},"terms_accepted":{"type":"boolean","description":"Optional compatibility field. customer_consent.confirmed=true authorises the public booking request."}}},"VehicleQuoteResultsActionsRequest":{"type":"object","required":["origin_domain","verification","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The quote host where the customer journey originated. Must match the request host."},"verification":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}},"quote_reference":{"type":"string","description":"Required for full result actions. Email-only lookup returns customer-safe quote choices."},"full_details":{"type":"boolean"},"customer_consent":{"$ref":"#\/components\/schemas\/VehicleResultsConsent"},"agent":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"platform":{"type":"string"}}}}},"VehicleQuoteBookingRequest":{"type":"object","required":["origin_domain","verification","quote_reference","expected_fingerprint","idempotency_key","booking","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The approved quote host handling this request. Must match the request host."},"verification":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}},"quote_reference":{"type":"string"},"expected_fingerprint":{"type":"string","description":"Current fingerprint from results_status.booking_confirmation.fingerprint."},"idempotency_key":{"type":"string","description":"Required stable key so retrying the same booking request cannot create duplicate bookings."},"option_reference":{"type":"string"},"confirmation_text":{"type":"string"},"booking":{"type":"object","description":"Vehicle booking details. Payment\/card details are rejected by this API.","additionalProperties":false,"properties":{"vehicle":{"type":"object"},"pickup":{"type":"object"},"delivery":{"type":"object"},"tax_invoice_required":{"type":"boolean"},"invoice_name":{"type":"string","nullable":true},"invoice_address":{"type":"string","nullable":true},"customer_questions":{"type":"string","nullable":true},"goods_in_car":{"type":"boolean"}}},"customer_consent":{"$ref":"#\/components\/schemas\/VehicleBookingConsent"},"agent":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"platform":{"type":"string"}}},"source":{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string"},"surface":{"type":"string"}}}}},"VehicleQuoteSubmission":{"type":"object","required":["origin_domain","customer","pickup","delivery","vehicle","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The quote host where the customer journey originated."},"tenant":{"type":"string","description":"Optional. Omit tenant for public host-aware submissions unless Moveroo has supplied a tenant slug."},"idempotency_key":{"type":"string","description":"Optional stable key supplied by the agent. If omitted, Moveroo computes a quote-type-specific fingerprint."},"customer_consent":{"$ref":"#\/components\/schemas\/CustomerConsent"},"lead_attribution":{"$ref":"#\/components\/schemas\/LeadAttribution"},"customer":{"$ref":"#\/components\/schemas\/Customer"},"pickup":{"$ref":"#\/components\/schemas\/Location"},"delivery":{"$ref":"#\/components\/schemas\/Location"},"vehicle":{"type":"object","required":["make","model","year","is_drivable"],"properties":{"category":{"type":"string"},"make":{"type":"string"},"model":{"type":"string"},"year":{"type":"integer"},"is_drivable":{"type":"boolean"},"condition":{"type":"string"},"has_working_brakes":{"type":"boolean"},"can_roll":{"type":"boolean"},"has_keys":{"type":"boolean"},"is_damaged":{"type":"boolean"},"damage_details":{"type":"string"}}},"timing":{"type":"object","properties":{"preferred_date":{"type":"string","format":"date"},"is_flexible":{"type":"boolean"}}},"channel":{"type":"string"},"surface":{"type":"string"},"notes":{"type":"string"}}},"VehicleQuoteIntakeAction":{"type":"object","properties":{"origin_domain":{"type":"string","description":"Optional for workflow actions. Defaults to the request host and must match when supplied."},"tenant":{"type":"string","description":"Optional. Omit tenant unless Moveroo has supplied a tenant slug."},"draft_id":{"type":"integer","description":"Required after a draft is created."},"session_token":{"type":"string","description":"Required after a draft is created."},"message":{"type":"string","description":"Natural-language message for the message, vehicle-detail, or dimension-check actions."},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"query":{"type":"string","description":"Locality or vehicle search phrase."},"locality_id":{"type":"integer"},"category":{"type":"string"},"vehicle_category":{"type":"string"},"make":{"type":"string"},"model":{"type":"string"},"year":{"type":"integer"},"reference_make_id":{"type":"integer"},"reference_model_id":{"type":"integer"},"is_drivable":{"type":"boolean"},"condition":{"type":"string"},"kind":{"type":"string","enum":["pickup","delivery","vehicle"]},"value_fingerprint":{"type":"string"},"confirmed":{"type":"boolean"},"confirmation_text":{"type":"string"},"customer_consent":{"$ref":"#\/components\/schemas\/CustomerConsent"},"idempotency_key":{"type":"string"},"channel":{"type":"string"},"surface":{"type":"string"}}},"CallbackRequest":{"type":"object","required":["origin_domain","customer","slot","customer_consent"],"properties":{"origin_domain":{"type":"string","description":"The quote\/contact host where the customer journey originated. Must match the request host."},"idempotency_key":{"type":"string","description":"Optional stable key supplied by the agent. If omitted, Moveroo computes a callback request fingerprint."},"customer_consent":{"$ref":"#\/components\/schemas\/CallbackConsent"},"customer":{"$ref":"#\/components\/schemas\/Customer"},"slot":{"type":"string","description":"ISO-8601 callback slot token from the public contact page availability list."},"channel":{"type":"string"},"surface":{"type":"string"},"agent":{"type":"object","properties":{"name":{"type":"string"},"platform":{"type":"string"}}},"notes":{"type":"string"}}},"CallbackSlotsResponse":{"type":"object","properties":{"success":{"type":"boolean"},"source_hostname":{"type":"string"},"timezone":{"type":"string"},"slot_groups":{"type":"array","items":{"type":"object","properties":{"date_key":{"type":"string"},"date_label":{"type":"string"},"slots":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"time_label":{"type":"string"}}}}}}}}}}}}