{"openapi":"3.1.0","info":{"title":"Transport Hub API","description":"Unified API for the Transport Hub ecosystem (moving, freight, relocation brands). All brand frontends, AI agents, and partner integrations consume this API as the single source of truth.","version":"1.0"},"paths":{"/v1/partners":{"get":{"tags":["partners"],"summary":"List Partners","description":"List/filter partners. Filters: city, country, type, language, radius (lat/lng/radius_km).","operationId":"list_partners_v1_partners_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by partner.city","title":"City"},"description":"Filter by partner.city"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2,"pattern":"^[A-Za-z]{2}$"},{"type":"null"}],"description":"Filter by partner.country (ISO 3166-1 alpha-2)","title":"Country"},"description":"Filter by partner.country (ISO 3166-1 alpha-2)"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by partner.type","title":"Type"},"description":"Filter by partner.type"},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by partner_language.lang (ISO 639-1)","title":"Language"},"description":"Filter by partner_language.lang (ISO 639-1)"},{"name":"radius_km","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Radius filter in km (requires lat/lng)","title":"Radius Km"},"description":"Radius filter in km (requires lat/lng)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Partners V1 Partners Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/partners/{partner_id}":{"get":{"tags":["partners"],"summary":"Get Partner","description":"Fetch a single partner by id.","operationId":"get_partner_v1_partners__partner_id__get","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Partner Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Partner V1 Partners  Partner Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pricing/estimate":{"post":{"tags":["pricing"],"summary":"Estimate","description":"Generate a preliminary price estimate using the config-driven all_in formula.","operationId":"estimate_v1_pricing_estimate_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/routes/{slug}":{"get":{"tags":["routes"],"summary":"Get Route","description":"Fetch a route by its unique slug (e.g. 'berlin-hamburg').","operationId":"get_route_v1_routes__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Route V1 Routes  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cbm/rooms":{"get":{"tags":["cbm"],"summary":"List Catalog Rooms","description":"List room-count presets in the CBM catalog.","operationId":"list_catalog_rooms_v1_cbm_rooms_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Catalog Rooms V1 Cbm Rooms Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cbm/items":{"get":{"tags":["cbm"],"summary":"List Catalog Items","description":"List catalog entries, using the requested populated localized column.","operationId":"list_catalog_items_v1_cbm_items_get","parameters":[{"name":"room","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Room"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(de|en|fr|ro)$","default":"de","title":"Lang"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Catalog Items V1 Cbm Items Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cbm/catalog/estimate":{"post":{"tags":["cbm"],"summary":"Estimate Catalog Cbm","description":"Calculate volume from catalog items or a room preset without touching legacy POST.","operationId":"estimate_catalog_cbm_v1_cbm_catalog_estimate_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogEstimateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Estimate Catalog Cbm V1 Cbm Catalog Estimate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cbm/estimate":{"post":{"tags":["cbm"],"summary":"Estimate Cbm","description":"Compute a volume estimate using either the room preset table or an item list.","operationId":"estimate_cbm_v1_cbm_estimate_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CbmEstimateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CbmEstimateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/leads":{"post":{"tags":["leads"],"summary":"Create Lead","description":"Create a lead scoped to the brand resolved from X-Brand.","operationId":"create_lead_v1_leads_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/widget/estimate":{"post":{"tags":["widget"],"summary":"Widget Estimate","operationId":"widget_estimate_v1_widget_estimate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetQuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Widget Estimate V1 Widget Estimate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/countries":{"get":{"tags":["countries"],"summary":"List Countries","description":"List countries that have content in the requested language.","operationId":"list_countries_v1_countries_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"en","title":"Lang"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Countries V1 Countries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/countries/{iso}/content":{"get":{"tags":["countries"],"summary":"Country Content","description":"Full content blocks for one country in one language.","operationId":"country_content_v1_countries__iso__content_get","parameters":[{"name":"iso","in":"path","required":true,"schema":{"type":"string","title":"Iso"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"en","title":"Lang"}},{"name":"content_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Country Content V1 Countries  Iso  Content Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/countries/{iso}/immigration":{"get":{"tags":["countries"],"summary":"Country Immigration","description":"Immigration providers (lawyers + relocation agencies) for one country.","operationId":"country_immigration_v1_countries__iso__immigration_get","parameters":[{"name":"iso","in":"path","required":true,"schema":{"type":"string","title":"Iso"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Brand","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Brand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Country Immigration V1 Countries  Iso  Immigration Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","description":"Liveness/readiness probe. Always 200; reports DB connectivity as a field,\nnever as a failure -- Cloud Run health checks must not flap because of DB\noutages unrelated to the API process itself.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}}},"components":{"schemas":{"AccessInfo":{"properties":{"floor":{"type":"integer","title":"Floor","default":0},"has_elevator":{"type":"boolean","title":"Has Elevator","default":false},"long_carry_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Long Carry M"}},"type":"object","title":"AccessInfo","description":"Floor/elevator/long-carry conditions for one side of the move."},"Breakdown":{"properties":{"base_cents":{"type":"integer","title":"Base Cents"},"volume_cents":{"type":"integer","title":"Volume Cents"},"distance_cents":{"type":"integer","title":"Distance Cents"},"labor_cents":{"type":"integer","title":"Labor Cents","default":0},"access_surcharge_cents":{"type":"integer","title":"Access Surcharge Cents","default":0},"packing_cents":{"type":"integer","title":"Packing Cents","default":0},"storage_cents":{"type":"integer","title":"Storage Cents","default":0},"all_in_estimate_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"All In Estimate Cents"},"ftc_groupage_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ftc Groupage Cents"}},"type":"object","required":["base_cents","volume_cents","distance_cents"],"title":"Breakdown"},"CatalogEstimateItem":{"properties":{"id":{"type":"integer","exclusiveMinimum":0.0,"title":"Id"},"qty":{"type":"integer","exclusiveMinimum":0.0,"title":"Qty"}},"type":"object","required":["id","qty"],"title":"CatalogEstimateItem"},"CatalogEstimateRequest":{"properties":{"rooms":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Rooms"},"items":{"items":{"$ref":"#/components/schemas/CatalogEstimateItem"},"type":"array","title":"Items"}},"type":"object","title":"CatalogEstimateRequest","description":"Input for the new catalog endpoint, separate from legacy estimate."},"CbmBoxesEstimate":{"properties":{"box_type":{"type":"string","title":"Box Type","default":"Buecherkarton"},"count":{"type":"integer","title":"Count"},"capacity_m3":{"type":"number","title":"Capacity M3","default":0.5}},"type":"object","required":["count"],"title":"CbmBoxesEstimate"},"CbmEstimateBreakdown":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"qty":{"type":"integer","title":"Qty"},"unit_m3":{"type":"number","title":"Unit M3"},"subtotal":{"type":"number","title":"Subtotal"}},"type":"object","required":["id","qty","unit_m3","subtotal"],"title":"CbmEstimateBreakdown"},"CbmEstimateItem":{"properties":{"id":{"type":"integer","exclusiveMinimum":0.0,"title":"Id"},"qty":{"type":"integer","exclusiveMinimum":0.0,"title":"Qty"}},"type":"object","required":["id","qty"],"title":"CbmEstimateItem"},"CbmEstimateRequest":{"properties":{"method":{"type":"string","enum":["room_preset","item_list"],"title":"Method","default":"room_preset"},"rooms":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Rooms"},"item_ids":{"items":{"type":"integer"},"type":"array","title":"Item Ids"},"item_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Item Counts"},"items":{"items":{"$ref":"#/components/schemas/CbmEstimateItem"},"type":"array","title":"Items"},"lang":{"type":"string","enum":["de","en"],"title":"Lang","default":"de"}},"type":"object","title":"CbmEstimateRequest","description":"Request body for POST /v1/cbm/estimate."},"CbmEstimateResponse":{"properties":{"total_m3":{"type":"number","title":"Total M3"},"low_m3":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Low M3"},"high_m3":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"High M3"},"confidence":{"type":"string","enum":["estimate","high","photo-verified"],"title":"Confidence","default":"estimate"},"source":{"type":"string","enum":["room_based","item_search","ai_photo"],"title":"Source","default":"room_based"},"breakdown":{"anyOf":[{"items":{"$ref":"#/components/schemas/CbmEstimateBreakdown"},"type":"array"},{"type":"null"}],"title":"Breakdown"},"boxes_estimate":{"anyOf":[{"$ref":"#/components/schemas/CbmBoxesEstimate"},{"type":"null"}]},"methodology_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Methodology Version"},"sources":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sources"}},"type":"object","required":["total_m3"],"title":"CbmEstimateResponse","description":"Response body for POST /v1/cbm/estimate."},"Confidence":{"properties":{"level":{"type":"string","enum":["low","medium","high"],"title":"Level","default":"medium"},"reason":{"type":"string","title":"Reason","default":""}},"type":"object","title":"Confidence"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Lead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"brand_id":{"type":"integer","title":"Brand Id"},"from_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From City"},"to_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To City"},"total_m3":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total M3"},"move_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Move Date"},"move_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move Type"},"budget_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Band"},"languages":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Languages"},"packing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Packing"},"storage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Storage"},"estimated_low_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Low Cents"},"estimated_high_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated High Cents"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"routed_partner_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Routed Partner Ids"},"status":{"type":"string","title":"Status","default":"new"},"consent":{"type":"boolean","title":"Consent","default":false},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","brand_id"],"title":"Lead","description":"Mirrors the `lead` table."},"LeadCreateRequest":{"properties":{"from_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From City"},"to_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To City"},"total_m3":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total M3"},"move_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Move Date"},"move_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move Type"},"budget_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Band"},"languages":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Languages"},"packing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Packing"},"storage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Storage"},"estimated_low_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Low Cents"},"estimated_high_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated High Cents"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"consent":{"type":"boolean","title":"Consent","default":false},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"}},"type":"object","title":"LeadCreateRequest","description":"Request body for POST /v1/leads. brand_id is resolved server-side from X-Brand."},"MarketBenchmarkBlock":{"properties":{"band":{"type":"string","enum":["below_market","in_market","above_market","unknown"],"title":"Band","default":"unknown"},"reference_range_cents":{"anyOf":[{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Reference Range Cents"},"note":{"type":"string","title":"Note","default":""}},"type":"object","title":"MarketBenchmarkBlock"},"PriceBlock":{"properties":{"estimate_cents":{"type":"integer","title":"Estimate Cents"},"range_low_cents":{"type":"integer","title":"Range Low Cents"},"range_high_cents":{"type":"integer","title":"Range High Cents"},"currency":{"type":"string","title":"Currency"},"vat_included":{"type":"boolean","title":"Vat Included","default":false},"vat_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vat Pct"},"range_low_basis":{"type":"string","title":"Range Low Basis","default":"all_in"},"range_high_basis":{"type":"string","title":"Range High Basis","default":"all_in"}},"type":"object","required":["estimate_cents","range_low_cents","range_high_cents","currency"],"title":"PriceBlock"},"QuoteRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"country":{"type":"string","title":"Country"},"segment":{"anyOf":[{"type":"string","enum":["local","fern","international","office"]},{"type":"null"}],"title":"Segment"},"total_m3":{"type":"number","exclusiveMinimum":0.0,"title":"Total M3"},"distance_km":{"type":"number","minimum":0.0,"title":"Distance Km"},"from_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Country"},"to_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Country"},"access_from":{"$ref":"#/components/schemas/AccessInfo"},"access_to":{"$ref":"#/components/schemas/AccessInfo"},"packing":{"type":"string","enum":["none","partial","full"],"title":"Packing","default":"none"},"storage_months":{"type":"integer","title":"Storage Months","default":0},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"}},"type":"object","required":["brand","country","total_m3","distance_km"],"title":"QuoteRequest","description":"Request body for POST /v1/pricing/estimate.\n\nMirrors research/13-pricing-engine.md PricingRequest, trimmed to what the\npure pricing function actually consumes, and using schema.sql-aligned\nidentifiers (`country`, `brand` -> brand.code) for config selection."},"QuoteResponse":{"properties":{"price":{"$ref":"#/components/schemas/PriceBlock"},"breakdown":{"$ref":"#/components/schemas/Breakdown"},"confidence":{"$ref":"#/components/schemas/Confidence"},"market_benchmark":{"$ref":"#/components/schemas/MarketBenchmarkBlock"},"currency":{"type":"string","title":"Currency"},"methodology_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Methodology Version"},"segment":{"type":"string","title":"Segment"}},"type":"object","required":["price","breakdown","confidence","market_benchmark","currency","segment"],"title":"QuoteResponse","description":"Response body for POST /v1/pricing/estimate."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WidgetQuoteRequest":{"properties":{"from":{"type":"string","maxLength":80,"minLength":1,"title":"From"},"to":{"type":"string","maxLength":80,"minLength":1,"title":"To"},"volume_m3":{"type":"number","maximum":200.0,"exclusiveMinimum":0.0,"title":"Volume M3"},"brand":{"type":"string","maxLength":40,"title":"Brand","default":"fromtocargo"}},"type":"object","required":["from","to","volume_m3"],"title":"WidgetQuoteRequest"}}}}