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_storage_warehouse

logistics.book_storage_warehouse — Full Intent Specification

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

Short- or long-term storage of household goods, documents, electronics, or other lawful items in a partner-operated warehouse. Distinct from logistics.book_full_house_move because: (a) storage is a separate billable service charged per cft × month; (b) facility class matters (climate-controlled / dehumidified / standard); (c) access frequency varies (sealed-and-stored vs visit-anytime); (d) inventory check-in and check-out are formal events with photos and an itemized register; (e) fire/theft/flood insurance is a separate product layered on top of storage rent.


1. NATURAL LANGUAGE COVERAGE

Classifies IN

  • "store my stuff for 3 months"
  • "household storage Bangalore, 2BHK contents"
  • "warehouse for furniture while I'm abroad"
  • "rent a self-storage unit"
  • "store electronics, climate-controlled"
  • "document storage 1 year"
  • "secure storage for paintings"
  • "winter storage for AC and heater"
  • "monthly storage 200 cft"
  • "store mattress and boxes 6 months"

Classifies OUT — borderline NO

  • "shift my house" → logistics.book_full_house_move
  • "store goods at port" → freight forwarding, out of v1
  • "store crypto/digital assets" → out of scope
  • "store medicine/vaccine" → logistics.book_cold_chain_delivery (or specialist)
  • "store car" → vehicle storage, out of v1 (backlog)

MULTI-INTENT TRIGGERS

  • "move + store for 2 months" → logistics.book_full_house_move + logistics.book_storage_warehouse
  • "travel abroad — store + visa" → logistics.book_storage_warehouse + travel.book_visa_assistance

2. INPUT — TOMO → PROVIDER

{
  "intent":          "logistics.book_storage_warehouse",
  "intent_version":  "v1.0.0",
  "request_id":      "req_sw_8q4r_2026-05-14T14:00:00Z",
  "user_session_id": "anon_user_token_or_uid",

  "scope": {
    "city":              "Bengaluru",
    "approx_volume_cft": 250,
    "duration_months":   3,
    "duration_months_renewable": true
  },

  "facility_preference": {
    "class":              "climate_controlled",
    "classes_allowed":    ["standard", "dehumidified", "climate_controlled", "vault_high_security"],
    "access_frequency":   "sealed_until_end",
    "access_allowed":     ["sealed_until_end", "scheduled_visits", "open_access"],
    "ground_floor_only":  false
  },

  "inventory_summary": {
    "categories":     ["furniture", "appliances", "electronics", "apparel"],
    "fragile_count":  20,
    "valuables_declared_inr": 25000,
    "itemized_register_uploaded": true,
    "total_declared_value_inr": 480000
  },

  "logistics": {
    "pickup_required": true,
    "pickup_address_id": "addr_old_apt_v1",
    "drop_required":   true,
    "drop_address_id_at_end": "addr_new_apt_v1"
  },

  "insurance": {
    "type":             "fire_theft_flood",
    "type_allowed":     ["fire_theft_flood", "all_risk_extended", "none"],
    "sum_insured_inr":  480000
  },

  "user_constants": {
    "preferred_partners": ["StoreMore", "Zippsafe", "BoxxBox", "SafeStorage India"]
  }
}

Field rules

  • approx_volume_cft integer; partner may re-measure on intake and adjust monthly rent — surface this honestly.
  • class STRICT ENUM.
  • duration_months integer ≥ 1; long-term discounts possible per partner.
  • itemized_register_uploaded: true mandatory for any claim window.

3. PROVIDER TOOLS

storage.quote

Returns monthly rent + intake fee + outtake fee + pickup/drop carriage.

storage.facility_class_check

Confirms class availability at user's city.

storage.book

Locks unit. Returns unit_id, seal_id to be applied at intake.

storage.intake_capture

At intake: itemized register signed, photo of each row in unit, seal applied.

storage.visit_request

For scheduled_visits access mode — schedules a viewing/pickup window.

storage.extend

Renews monthly storage.

storage.outtake_capture

At end: seal verified, items reloaded, comparison-photos vs intake.

storage.dispute

File theft/fire/damage claim within 7 days of outtake (or anytime during stay if facility detects).

storage.cancel

Pre-intake cancel allowed; post-intake = subject to lock-in if any.


4. RESPONSE SHAPE

{
  "intent": "logistics.book_storage_warehouse",
  "request_id": "req_sw_8q4r_2026-05-14T14:00:00Z",
  "options": [
    {
      "tier": "OK",
      "provider": "BoxxBox",
      "facility_class": "standard",
      "access_frequency": "sealed_until_end",
      "monthly_rent_inr": 4500,
      "intake_fee_inr":  1500,
      "outtake_fee_inr": 1500,
      "pickup_carriage_inr": 2200,
      "drop_carriage_inr":   2200,
      "total_3_months_inr":  20900,
      "insurance_included_inr": 50000,
      "fire_sprinklers": true,
      "cctv_24x7": true,
      "ttbs_score": 0.66,
      "tier_reason": "cheapest, standard class"
    },
    {
      "tier": "GOOD",
      "provider": "StoreMore",
      "facility_class": "dehumidified",
      "access_frequency": "scheduled_visits",
      "monthly_rent_inr": 6500,
      "intake_fee_inr":  1500,
      "outtake_fee_inr": 1500,
      "pickup_carriage_inr": 2200,
      "drop_carriage_inr":   2200,
      "total_3_months_inr":  26900,
      "insurance_included_inr": 200000,
      "fire_sprinklers": true,
      "cctv_24x7": true,
      "pest_control_quarterly": true,
      "humidity_target_pct": "55_to_60",
      "ttbs_score": 0.84,
      "tier_reason": "balanced — humidity-controlled + visit access"
    },
    {
      "tier": "GREAT",
      "provider": "SafeStorage India",
      "facility_class": "climate_controlled",
      "access_frequency": "scheduled_visits",
      "monthly_rent_inr": 9200,
      "intake_fee_inr":  0,
      "outtake_fee_inr": 0,
      "pickup_carriage_inr": 2200,
      "drop_carriage_inr":   2200,
      "total_3_months_inr":  32000,
      "insurance_included_inr": 480000,
      "insurance_cover_meets_declared_value": true,
      "fire_sprinklers": true,
      "cctv_24x7": true,
      "pest_control_quarterly": true,
      "humidity_target_pct": "45_to_55",
      "temperature_target_c": "20_to_24",
      "vault_within_facility_available": false,
      "ttbs_score": 0.93,
      "tier_reason": "climate-controlled + full cover + no intake/outtake fee"
    }
  ]
}

5. CONTROLLED VOCABULARIES

facility_class

standard · dehumidified · climate_controlled · vault_high_security

access_frequency

sealed_until_end · scheduled_visits · open_access

insurance.type

fire_theft_flood · all_risk_extended · none

inventory_summary.categories

furniture · appliances · electronics · apparel · documents · art_collectibles · kitchenware · other_lawful

BANNED — items not allowed in storage

cash · gold_jewellery · narcotics · weapons · flammable_liquid · compressed_gas · radioactive · livestock · perishable_food · lithium_loose_over_100Wh · human_remains · pharmacy_prescription_controlled

All STRICT ENUM.


6. TTBS DIMENSIONS

TIME (weight 0.15)

  • Intake slot availability
  • Pickup latency
  • Outtake notice period (some partners need 48h)
  • TIME = slot_band × pickup_latency_band × notice_band

TASTE (weight 0.10)

  • Facility cleanliness rating
  • Staff politeness
  • Tracking/visit-scheduling UX
  • TASTE = clean × staff_band × ux

BUDGET (weight 0.35)

  • total_<duration>_months_inr vs best
  • Intake/outtake fee transparency
  • Volume re-measure on intake fairness
  • Long-term discount honesty
  • BUDGET = 1 − (total − best) / best

SAFETY (weight 0.40 — dominant)

  • insurance_cover_meets_declared_value
  • Fire sprinklers
  • CCTV 24×7
  • Pest control schedule
  • Climate/humidity targets met for sensitive items
  • Seal-applied-and-verified protocol
  • Facility access logs
  • SAFETY = insurance_fit × fire × cctv × pest × climate × seal × access_log

HARD FILTERS

  1. Facility class available in user's city.
  2. Insurance ≥ declared value OR user-acknowledged gap.
  3. No banned items in declared inventory.
  4. CCTV + fire sprinklers + locked-unit protocol present.
  5. Itemized register uploaded (for claim eligibility).

7. COMPLETION CONTRACT

Success criteria (for a complete storage cycle)

  1. Quote accepted; unit + seal_id assigned.
  2. Pickup carriage delivers items to facility.
  3. Intake photos captured; register signed; seal applied.
  4. Monthly rent auto-charged via UPI Autopay or invoice.
  5. (Optional) scheduled visits handled.
  6. Outtake notice received; items reloaded; comparison-photos taken.
  7. Drop carriage to user's address.
  8. CPC webhook fires on outtake completion.

CPC webhook

{
  "event": "logistics.book_storage_warehouse.completed",
  "intent_id": "logistics.book_storage_warehouse",
  "request_id": "req_sw_8q4r_2026-05-14T14:00:00Z",
  "unit_id": "SAFE-BLR-U2-A11",
  "provider": "SafeStorage India",
  "facility_class": "climate_controlled",
  "duration_months_actual": 3,
  "intake_at_iso": "2026-05-20T11:00:00+05:30",
  "outtake_at_iso": "2026-08-22T15:00:00+05:30",
  "monthly_rent_inr": 9200,
  "total_billed_inr": 32000,
  "tomo_commission_base_inr": 4800,
  "tomo_commission_inr": 480,
  "pass_through_inr": 27200,
  "intake_photo_set_hash": "sha256-…",
  "outtake_photo_set_hash": "sha256-…",
  "seal_intact": true,
  "signature_hmac_sha256": "…"
}

Failure cases

  • seal_broken_during_stay → mandatory partner investigation + insurance pre-claim.
  • pest_infestation → partner remediation + pro-rated credit per partner.
  • payment_default_user → partner lock-out + auction policy disclosed (long-term debt rule, partner-specific).
  • outtake_recipient_unavailable → reschedule with notice fee.

8. WIDGET

{
  "widget": "StorageBookingWidget",
  "header": {
    "scope_strip": "Bengaluru · ~250 cft · 3 months",
    "facility_strip": "Climate-controlled options available",
    "banned_check_strip": "Inventory passes banned-list check"
  },
  "regions": {
    "region_1_intelligence": ["20 fragile items declared", "₹4.8L sum insured", "humidity target 45–55%", "CCTV + sprinklers all tiers"],
    "region_2_summary": "Pickup May 20, return Aug 22 (90 days)",
    "region_3_visual": "facility_photo_url (partner-supplied, signed)",
    "region_4_now_pin": "Lock unit — 3 climate-controlled spaces left",
    "region_5_tomo_choices": [
      {"tier": "OK", "label": "BoxxBox Standard · ₹20,900 / 3 mo · ₹50k cover", "reason": "cheapest"},
      {"tier": "GOOD", "label": "StoreMore Dehumidified · ₹26,900 / 3 mo · ₹2L cover + visit access", "reason": "balanced"},
      {"tier": "GREAT", "label": "SafeStorage Climate · ₹32,000 / 3 mo · full ₹4.8L cover", "reason": "highest safety"}
    ]
  },
  "footer_disclosures": [
    "Volume is re-measured on intake — partner may revise monthly rent ±10%; cap is shown above.",
    "Banned items (cash, gold, narcotics, weapons, perishables) are not allowed — facility will refuse them at intake.",
    "Claim window is 7 days from outtake — itemized register + photos must match."
  ]
}

9. CACHING POLICY

  • Quote: 24 hours TTL.
  • Facility class availability: weekly per city.
  • Itemized register: encrypted at partner; pointer at TOMO; deleted 90 days post-outtake unless claim open.
  • Photos: hash only at TOMO; full at partner; retained ≥ 12 months at partner per claim policy.
  • Past storage bookings: 5 years on-device, encrypted.

10. ERROR CODES

Code Meaning UI surface
ERR_FACILITY_CLASS_UNAVAILABLE requested class not in city Suggest alt class
ERR_BANNED_ITEM_DECLARED banned in inventory Plain blocker + remove items
ERR_INSURANCE_GAP cover < declared Top-up offer
ERR_ITEMIZED_REGISTER_MISSING register not uploaded Inline capture
ERR_VOLUME_REMEASURE_GAP re-measure ±>10% of declared Show new rate; user accept/decline
ERR_SEAL_BROKEN seal compromised Partner investigation + pre-claim
ERR_PAYMENT_DEFAULT monthly rent failed Auto-retry + grace + escalation
ERR_OUTTAKE_NOTICE_TOO_SHORT notice < 48h Reschedule
ERR_PEST_INFESTATION facility-side issue Pro-rated credit + remediation
ERR_PARTNER_OFFLINE partner API down Try next

11. SANDBOX → PRODUCTION CHECKLIST

  • Sandbox banned-item check rejects all banned ENUMs.
  • Sandbox volume re-measure ±10% adjusts rent automatically.
  • Sandbox intake/outtake photo capture mandatory.
  • Sandbox seal-broken flow triggers investigation.
  • Sandbox UPI Autopay monthly-rent test.
  • Sandbox claim window 7-day post-outtake enforced.
  • Production facility certifications (fire / civil) verified.
  • Production insurance contracts attested by legal.
  • Production rate-limit: not relevant (storage is per-user contract).
  • Production CCTV retention ≥ 30 days at partner.
  • Production CPC HMAC-SHA256 5-min replay verified.

12. ANTI-FABRICATION RULES

  • NO paid_placement on partners.
  • NO synthetic facility photos.
  • NO "fully insured" without exact insurance_cover_inr.
  • NO concealing volume re-measure clause.
  • NO bundling promo into total.
  • NO claim of climate control without target humidity/temperature.
  • NO TOMO-issued seal_id — partner's only.
  • NO holding inventory data — partner is custodian.
  • NO synthetic "0 pest in 2 years" claim — only partner-attested.
  • NO marketing language ("smart storage").

13. REGULATORY FRAMING

  • Warehousing (Development and Regulation) Act 2007 + WDRA registration for partner facilities.
  • Indian Contracts Act 1872 — bailment rules apply: partner is bailee, user is bailor.
  • Fire Services / Civil Defence state regulations — sprinklers, fire alarm certification.
  • IRDAI — fire-theft-flood / all-risk-extended insurance products.
  • Consumer Protection Act 2019 — partner is service provider.
  • DPDPA 2023 — inventory + photos = personal data; partner is processor.
  • CrPC 102 / police seizure — partner is required to surface seizure to user; TOMO not in the loop.
  • TOMO is router only — does NOT operate facilities, does NOT hold custody, does NOT issue insurance.