T
TOMO
Developer Docs
BETA These docs are under partner review. Some features described are roadmap items, not yet shipped. Verify against your sandbox before relying on any contract.
● LIVEv1.0.0logistics.book_furniture_move

logistics.book_furniture_move — Full Intent Specification

INTENT NAMESPACE: logistics
INTENT NAME:      book_furniture_move
FULL ID:          logistics.book_furniture_move
VERSION:          v1.0.0
STATUS:           live
TTBS WEIGHTS:     time 0.25 · taste 0.10 · budget 0.30 · safety 0.35
LAST UPDATED:     2026-05-14

Single-item or small-set furniture relocation: sofa, bed, fridge, washing machine, treadmill, wardrobe, etc. Distinct from logistics.book_full_house_move because: (a) crew size is 2–3 (not 6+); (b) one or two pieces, not packing-list; (c) item-specific dismantle/reassemble skills (bed frame, wardrobe panels, treadmill brake) matter more than truck capacity; (d) usually intracity (intercity furniture move is allowed but rare). Distinct from logistics.send_intracity_parcel because: (a) heavy / oversize; (b) hoisting through stairwell, elevator clearance; (c) anti-damage padding mandatory; (d) carpenter add-on for assembly.


1. NATURAL LANGUAGE COVERAGE

Classifies IN

  • "move sofa to new apartment"
  • "shift fridge from old place"
  • "Porter for a bed"
  • "shift my washing machine"
  • "move treadmill upstairs"
  • "shift wardrobe across town"
  • "relocate dining table, fragile glass top"
  • "move my study desk and chair"
  • "shift IKEA bookshelf, needs disassembly"
  • "couch + 2 chairs to friend's house"

Classifies OUT — borderline NO

  • "shift entire 2BHK" → logistics.book_full_house_move
  • "courier a chair to Mumbai" → logistics.send_intercity_parcel (small light items)
  • "bike transport" → logistics.book_bike_transport
  • "move office files" → small set: logistics.send_intracity_parcel; big set: logistics.book_full_house_move

MULTI-INTENT TRIGGERS

  • "move sofa + buy new TV unit" → logistics.book_furniture_move + marketplace.buy_used_furniture (or e-com)
  • "shift fridge + book carpenter for kitchen"

2. INPUT — TOMO → PROVIDER

{
  "intent":          "logistics.book_furniture_move",
  "intent_version":  "v1.0.0",
  "request_id":      "req_fm_5x8q_2026-05-14T12:00:00Z",
  "user_session_id": "anon_user_token_or_uid",

  "pickup": {
    "address_id":   "addr_old_apt_v1",
    "lat":           17.4239, "lng": 78.4738,
    "pin":           "500032",
    "floor":         "3",
    "lift_available": true,
    "stairs_width_cm_optional": 110,
    "contact_phone_e164": "+91XXXXXXXXXX",
    "ready_at_iso":  "2026-05-15T10:00:00+05:30"
  },

  "drop": {
    "address_id":   "addr_new_apt_v1",
    "lat":           17.4435, "lng": 78.3772,
    "pin":           "500081",
    "floor":         "5",
    "lift_available": true,
    "stairs_width_cm_optional": 105,
    "contact_phone_e164": "+91XXXXXXXXXX"
  },

  "items": [
    {
      "item":              "sofa_3_seater",
      "dim_l_cm":          220, "dim_w_cm": 90, "dim_h_cm": 85,
      "weight_kg_estimate": 70,
      "fragile_glass_or_marble": false,
      "needs_dismantle":   false
    },
    {
      "item":              "dining_table_glass_top",
      "dim_l_cm":          180, "dim_w_cm": 90, "dim_h_cm": 75,
      "weight_kg_estimate": 50,
      "fragile_glass_or_marble": true,
      "needs_dismantle":   true
    }
  ],

  "add_ons": {
    "carpenter_reassembly": true,
    "packing_blanket_wrap": true,
    "appliance_uninstall":  false
  },

  "vehicle_preference": "mini_truck",
  "vehicle_allowed":    ["mini_truck", "tempo"],

  "user_constants": {
    "preferred_partners": ["Porter Trucks", "Pikkol", "Agarwal Packers (light)"]
  }
}

Field rules

  • floor + lift_available + stairs_width_cm together determine surcharge band.
  • fragile_glass_or_marble: true → mandatory packing blanket + corner padding.
  • needs_dismantle: true → carpenter add-on auto-suggested.
  • Vehicle ENUM strict.

3. PROVIDER TOOLS

furn.survey_estimate

Returns price estimate based on declared items + vehicle + floors + dismantle. May trigger video survey for large jobs.

furn.book_slot

Books crew + vehicle.

furn.assign_crew

Pre-job assignment with crew details + carpenter (if added).

furn.live_track

Crew GPS during the move window.

furn.completion_photo_capture

Post-move photo at drop floor — pre-condition for closure.

furn.dispute_damage

Files damage claim against partner insurance within 24h of completion.

furn.cancel

Pre-crew-dispatch only.


4. RESPONSE SHAPE

{
  "intent": "logistics.book_furniture_move",
  "request_id": "req_fm_5x8q_2026-05-14T12:00:00Z",
  "options": [
    {
      "tier": "OK",
      "provider": "Porter Trucks",
      "vehicle": "mini_truck",
      "crew_size": 2,
      "carpenter_included": false,
      "packing_blanket_included": true,
      "price_inr": 1800,
      "eta_pickup_window_iso": "2026-05-15T10:00:00+05:30",
      "duration_estimate_min": 90,
      "insurance_cover_inr": 5000,
      "ttbs_score": 0.62,
      "tier_reason": "cheapest, basic packing only"
    },
    {
      "tier": "GOOD",
      "provider": "Pikkol",
      "vehicle": "mini_truck",
      "crew_size": 3,
      "carpenter_included": true,
      "packing_blanket_included": true,
      "fragile_corner_padding": true,
      "price_inr": 3200,
      "eta_pickup_window_iso": "2026-05-15T10:00:00+05:30",
      "duration_estimate_min": 120,
      "insurance_cover_inr": 25000,
      "background_check_band": "verified",
      "ttbs_score": 0.84,
      "tier_reason": "balanced — carpenter + fragile padding + verified crew"
    },
    {
      "tier": "GREAT",
      "provider": "Agarwal Packers (Light Move)",
      "vehicle": "tempo",
      "crew_size": 4,
      "carpenter_included": true,
      "packing_blanket_included": true,
      "fragile_corner_padding": true,
      "appliance_uninstall_included": true,
      "price_inr": 5400,
      "eta_pickup_window_iso": "2026-05-15T09:30:00+05:30",
      "duration_estimate_min": 150,
      "insurance_cover_inr": 75000,
      "insurance_cover_meets_declared_value": true,
      "background_check_band": "verified_plus_aadhaar",
      "ttbs_score": 0.91,
      "tier_reason": "uninstall + 4-crew + ₹75k cover + Aadhaar verified"
    }
  ],
  "floor_surcharge_disclosure": {
    "pickup_floor": 3,
    "drop_floor": 5,
    "lifts_both_sides": true,
    "stair_surcharge_inr": 0
  }
}

5. CONTROLLED VOCABULARIES

vehicle

mini_truck · tempo · large_truck

item

sofa_2_seater · sofa_3_seater · sectional_sofa · single_bed · queen_bed · king_bed · wardrobe_2_door · wardrobe_3_door · dining_table_glass_top · dining_table_wood · dining_chair_set · study_desk · office_chair · bookshelf · tv_unit · refrigerator_single_door · refrigerator_double_door · washing_machine_top_load · washing_machine_front_load · treadmill · elliptical · air_conditioner_split · mirror_large · marble_top_table · piano

add_ons flags

carpenter_reassembly · packing_blanket_wrap · appliance_uninstall · appliance_reinstall · crane_hoist

background_check_band

unverified · verified · verified_plus_aadhaar

All STRICT ENUM.


6. TTBS DIMENSIONS

TIME (weight 0.25)

  • Pickup window ETA
  • Duration estimate
  • Slot availability tomorrow vs day-after
  • TIME = window_band × duration_band

TASTE (weight 0.10)

  • Crew politeness rating (recent 90d)
  • App tracking UX
  • TASTE = crew_rating × tracking_band

BUDGET (weight 0.30)

  • price_inr vs best
  • Floor surcharge transparency
  • Add-on cost transparency
  • BUDGET = 1 − (price − best) / best

SAFETY (weight 0.35 — dominant for fragile/valuable)

  • insurance_cover_inr ≥ declared value
  • Fragile-corner padding for glass/marble
  • Crew background check band
  • Carpenter qualification for dismantle items
  • Lift / stairs handling rule
  • SAFETY = insurance_fit × padding_band × bg_band × carpenter_qualified × access_handling

HARD FILTERS

  1. Vehicle capacity ≥ sum of item dims.
  2. Carpenter included if any item has needs_dismantle: true.
  3. Fragile padding included if any item has fragile_glass_or_marble: true.
  4. Insurance ≥ declared cumulative value of items (or user override).
  5. Crew bg band ≥ verified if cumulative value > ₹50k.

7. COMPLETION CONTRACT

Success criteria

  1. Crew assigned + ETA shared.
  2. Pre-move photo at pickup floor.
  3. Items loaded; transit live-tracked.
  4. Items delivered to drop floor.
  5. Carpenter reassembles (if booked); appliance uninstall/reinstall (if booked).
  6. Post-move photo at drop floor.
  7. User confirms or files damage claim within 24h.
  8. CPC webhook fires.

CPC webhook

{
  "event": "logistics.book_furniture_move.completed",
  "intent_id": "logistics.book_furniture_move",
  "request_id": "req_fm_5x8q_2026-05-14T12:00:00Z",
  "order_id": "FM9K22P",
  "provider": "Pikkol",
  "vehicle":  "mini_truck",
  "crew_size": 3,
  "price_inr": 3200,
  "tomo_commission_base_inr": 480,
  "tomo_commission_inr": 48,
  "pass_through_inr": 2720,
  "completion_photo_hash": "sha256-…",
  "completed_at_iso": "2026-05-15T13:42:00+05:30",
  "signature_hmac_sha256": "…"
}

Failure cases

  • pickup_no_show_user → cancel fee per partner.
  • crew_late → automatic compensation per partner SLA.
  • damage → claim within 24h via furn.dispute_damage.
  • lift_inoperable_at_drop → stair surcharge or partial completion + refund.

8. WIDGET

{
  "widget": "FurnitureMoveWidget",
  "header": {
    "items_strip": "2 items · sofa + dining table (glass)",
    "route_strip": "3rd floor (lift) → 5th floor (lift) · 13 km"
  },
  "regions": {
    "region_1_intelligence": ["glass top — fragile padding on", "table dismantle — carpenter on", "both lifts available"],
    "region_2_summary": "Pickup tomorrow 10 AM, ~2 hours job",
    "region_3_visual": null,
    "region_4_now_pin": "Book — 3 slots left tomorrow morning",
    "region_5_tomo_choices": [
      {"tier": "OK", "label": "Porter · ₹1,800 · basic packing", "reason": "cheapest"},
      {"tier": "GOOD", "label": "Pikkol · ₹3,200 · carpenter + fragile padding + verified", "reason": "balanced"},
      {"tier": "GREAT", "label": "Agarwal · ₹5,400 · 4 crew + uninstall + ₹75k cover", "reason": "highest safety"}
    ]
  },
  "footer_disclosures": [
    "Damage claims must be filed within 24 hours of completion — photo at drop matters.",
    "Glass/marble items always get corner padding — included by default for those rows.",
    "If carpenter is booked, reassembly happens at the drop site."
  ]
}

9. CACHING POLICY

  • Quote: 1 hour TTL.
  • Crew rating + bg band: provider-fresh.
  • Past furniture moves: 1 year on-device, encrypted.
  • Pre/post-move photos: hash only at TOMO; full at partner.

10. ERROR CODES

Code Meaning UI surface
ERR_VEHICLE_TOO_SMALL item dims > vehicle Upgrade vehicle
ERR_CARPENTER_REQUIRED dismantle item but carpenter not booked Auto-suggest add-on
ERR_LIFT_CLEARANCE item won't fit in lift dims Stair plan + surcharge
ERR_INSURANCE_GAP cover < declared Warn + upgrade
ERR_BG_BAND_TOO_LOW bg < verified for high-value Upgrade tier
ERR_DAMAGE_CLAIM_LATE beyond 24h window Apology + escalation
ERR_SLOT_UNAVAILABLE no slots in window Reschedule
ERR_PICKUP_NO_SHOW_USER user not present Cancel fee
ERR_CREW_LATE crew SLA breached Auto-comp
ERR_PARTNER_OFFLINE partner API down Try next

11. SANDBOX → PRODUCTION CHECKLIST

  • Sandbox vehicle-capacity check across all item ENUMs.
  • Sandbox fragile padding auto-includes for glass/marble.
  • Sandbox carpenter auto-suggest for dismantle items.
  • Sandbox lift/stairs surcharge logic.
  • Sandbox damage claim window 24h boundary.
  • Production crew bg band sourced from partner — no inference.
  • Production rate limit: 3 furniture moves/user/day.
  • Production insurance contract attested by legal.
  • Production multi-partner rotation tested for peak weekends.
  • Production CPC HMAC-SHA256 5-min replay verified.

12. ANTI-FABRICATION RULES

  • NO paid_placement on partners.
  • NO synthetic crew photos.
  • NO "fully insured" without insurance_cover_inr exact.
  • NO concealing surcharge.
  • NO bundling promo with move price.
  • NO claiming carpenter included when partner doesn't supply.
  • NO TOMO-issued "best move" claim.
  • NO marketing language ("smart move").
  • NO holding move data — partner is custodian.
  • NO synthetic before/after photos — partner-supplied only.

13. REGULATORY FRAMING

  • Carriage by Road Act 2007 + state RTO permits for goods carrier.
  • Motor Vehicles Act 1988 — goods permit, fitness.
  • Consumer Protection Act 2019 — partner is service provider.
  • IRDAI — partner insurance.
  • DPDPA 2023 — addresses, phone, photos = personal data; partner is processor.
  • Building lift regulations vary by state — partner crew responsible for lift safety.
  • TOMO is router only; does NOT operate vehicles or crew.