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.0safety.book_personal_security

safety.book_personal_security — Full Intent Specification

INTENT NAMESPACE: safety
INTENT NAME:      book_personal_security
FULL ID:          safety.book_personal_security
VERSION:          v1.0.0
STATUS:           live
TTBS WEIGHTS:     time 0.20 · taste 0.05 · budget 0.25 · safety 0.50
LAST UPDATED:     2026-05-14

Bodyguard / Personal Security Officer (PSO) / executive protection for an individual or family. Engagement is hourly, daily, or contract. Distinct from safety.subscribe_alarm_monitoring because: (a) protection is in-person and mobile, not a fixed-site CMS; (b) PSO certification (PSARA + Skill Sector Council training band) is the safety lever; (c) armed vs unarmed is regulated by state Arms Act licensing; (d) recce/advance-team work for events may be needed; (e) discretion + plain-clothes vs uniformed protocol is user-driven; (f) NDA + chain-of-command is contractual. TOMO surfaces only PSARA-licensed agencies — never freelance.


1. NATURAL LANGUAGE COVERAGE

Classifies IN

  • "book a bodyguard for tomorrow"
  • "PSO for my parents at the airport"
  • "executive protection 3 days"
  • "armed guard for cash transfer (small)"
  • "bouncer for event entry"
  • "female PSO for my daughter, school pickup week"
  • "discreet security at restaurant meeting"
  • "8-hour bodyguard tomorrow"
  • "VIP protection for visiting executive"
  • "security escort for shopping run, jewellery"

Classifies OUT — borderline NO

  • "alarm monitoring" → safety.subscribe_alarm_monitoring
  • "install CCTV" → safety.install_home_cctv
  • "police complaint" → out of v1 (legal aid, not security)
  • "personal trainer / fitness" → lifestyle.book_personal_trainer
  • "bouncer for entire event venue with multiple doors" → safety.book_event_security (different scope)

MULTI-INTENT TRIGGERS

  • "PSO + chauffeured cab" → safety.book_personal_security + mobility.book_chauffeur_hourly
  • "event security + bodyguard for the host" → safety.book_event_security + safety.book_personal_security
  • "wedding — bodyguard for bride + event security" → both intents

2. INPUT — TOMO → PROVIDER

{
  "intent":          "safety.book_personal_security",
  "intent_version":  "v1.0.0",
  "request_id":      "req_psec_2x7q_2026-05-14T16:30:00Z",
  "user_session_id": "anon_user_token_or_uid",

  "engagement": {
    "type":             "hourly",
    "types_allowed":    ["hourly", "daily", "weekly", "monthly_contract", "event_one_off"],
    "start_iso":        "2026-05-15T09:00:00+05:30",
    "end_iso":          "2026-05-15T17:00:00+05:30",
    "city":             "Hyderabad",
    "principal_count":  1,
    "principal_age_band":"adult",
    "principal_gender_preference_optional": "any",
    "female_pso_required_if_principal_female": true
  },

  "threat_profile": {
    "self_rated":       "low",
    "self_rated_allowed":["low", "medium", "high", "vip_high"],
    "context_note":     "Carrying valuable items between locations",
    "armed_required":   false,
    "discretion_band":  "plain_clothes"
  },

  "psos_requested": 1,
  "pso_attributes_required": {
    "min_height_cm":            175,
    "min_experience_years":     2,
    "training_level_min":       "psara_grade_b",
    "languages":                ["English", "Hindi", "Telugu"],
    "first_aid_certified":      true,
    "background_check_band":    "verified_plus_aadhaar"
  },

  "logistics": {
    "pickup_address_id":  "addr_home_v1",
    "vehicle_required":   false,
    "uniform":            "civilian"
  },

  "user_constants": {
    "preferred_agencies": ["G4S Securitas", "SIS Security", "Topsgrup", "ISS India"]
  }
}

Field rules

  • engagement.type ENUM strict.
  • threat_profile.armed_required: true requires partner's PSO to hold valid state Arms Act licence + assignment letter; partner enforces.
  • pso_attributes_required.background_check_band ≥ verified mandatory; HARD.
  • female_pso_required_if_principal_female: true enforced unless principal explicitly opts out.

3. PROVIDER TOOLS

psec.quote

Returns hourly/daily rate × duration + vehicle if requested.

psec.psara_verify

Returns license + state + validity for agency.

psec.assign_pso

Returns assigned PSO id (or pool of ids), badge band, photo (pre-engagement permission required), languages, certifications.

psec.recce_request

For event/high-threat — advance recce 24–72 h before.

psec.live_track

Live GPS during engagement (PSO opts in).

psec.checkin_checkout_capture

Beginning + end of shift photo + signature with principal.

psec.extend

Extend duration mid-engagement.

psec.dispute

For under-performance / misconduct.

psec.cancel

Cancel with policy band per agency.


4. RESPONSE SHAPE

{
  "intent": "safety.book_personal_security",
  "request_id": "req_psec_2x7q_2026-05-14T16:30:00Z",
  "options": [
    {
      "tier": "OK",
      "provider": "SIS Security",
      "hourly_rate_inr": 350,
      "duration_hours": 8,
      "total_inr": 2800,
      "psos_assignable": 1,
      "training_level_band": "psara_grade_b",
      "background_check_band": "verified",
      "armed_available": false,
      "discretion_band": "plain_clothes",
      "psara_license_no": "PSA-TS-2019-XXXX",
      "psara_valid_until_iso": "2027-08-31",
      "ttbs_score": 0.66,
      "tier_reason": "cheapest licensed PSO"
    },
    {
      "tier": "GOOD",
      "provider": "G4S Securitas",
      "hourly_rate_inr": 550,
      "duration_hours": 8,
      "total_inr": 4400,
      "psos_assignable": 1,
      "training_level_band": "psara_grade_a_plus_first_aid",
      "background_check_band": "verified_plus_aadhaar",
      "armed_available": true,
      "discretion_band": "plain_clothes",
      "psara_license_no": "PSA-KA-2017-XXXX",
      "psara_valid_until_iso": "2028-06-30",
      "languages_covered": ["English", "Hindi", "Telugu"],
      "ttbs_score": 0.86,
      "tier_reason": "balanced — Grade A + first aid + Aadhaar verified"
    },
    {
      "tier": "GREAT",
      "provider": "Topsgrup Elite",
      "hourly_rate_inr": 900,
      "duration_hours": 8,
      "total_inr": 7200,
      "psos_assignable": 1,
      "training_level_band": "ex_armed_forces_plus_psara_a",
      "background_check_band": "verified_plus_aadhaar_plus_court",
      "armed_available": true,
      "discretion_band": "plain_clothes",
      "psara_license_no": "PSA-MH-2015-XXXX",
      "psara_valid_until_iso": "2029-12-31",
      "languages_covered": ["English", "Hindi", "Telugu", "Tamil"],
      "recce_team_available": true,
      "encrypted_comms_radio": true,
      "ttbs_score": 0.94,
      "tier_reason": "ex-armed forces + recce + encrypted radio + court-record cleared"
    }
  ]
}

5. CONTROLLED VOCABULARIES

engagement.type

hourly · daily · weekly · monthly_contract · event_one_off

threat_profile.self_rated

low · medium · high · vip_high

discretion_band

uniformed · plain_clothes · formal_suit

training_level

psara_grade_c · psara_grade_b · psara_grade_a_plus_first_aid · ex_armed_forces_plus_psara_a

background_check_band

unverified · verified · verified_plus_aadhaar · verified_plus_aadhaar_plus_court

All STRICT ENUM.


6. TTBS DIMENSIONS

TIME (weight 0.20)

  • Assignment lead time (hourly = ≥ 2h; daily = ≥ 12h; event = ≥ 7d preferred)
  • PSO ETA at start point
  • TIME = lead_band × eta_band

TASTE (weight 0.05)

  • Agency brand
  • PSO grooming / communication band
  • TASTE = brand × pso_comms

BUDGET (weight 0.25)

  • total_inr vs best
  • Vehicle / overtime / weapon-deployment surcharge transparency
  • BUDGET = 1 − (total − best) / best

SAFETY (weight 0.50 — dominant)

  • PSARA license valid + state-aligned
  • training_level_band
  • background_check_band
  • First-aid certified
  • Armed availability matches threat profile (true positive / true negative)
  • Female PSO when principal female + flagged
  • Encrypted comms / recce capability for high tier
  • NDA / chain-of-command contract signed
  • SAFETY = psara × training × bg × first_aid × armed_fit × gender_fit × comms × nda

HARD FILTERS

  1. PSARA license valid + state-aligned.
  2. PSO bg band ≥ verified (≥ verified_plus_aadhaar for medium+).
  3. Armed PSO holds individual Arms Act license + assignment letter if armed_required.
  4. Female PSO assigned if female principal flag set.
  5. NDA + chain-of-command signed pre-engagement.

7. COMPLETION CONTRACT

Success criteria

  1. Quote accepted; agency assigned.
  2. PSO id + badge band + photo released to user with consent.
  3. NDA + chain-of-command signed.
  4. PSO check-in at start time + location.
  5. Live track active (PSO opts in).
  6. Check-out at end; principal signs satisfaction note.
  7. CPC webhook fires.

CPC webhook

{
  "event": "safety.book_personal_security.completed",
  "intent_id": "safety.book_personal_security",
  "request_id": "req_psec_2x7q_2026-05-14T16:30:00Z",
  "order_id": "PSEC9KP2",
  "provider": "G4S Securitas",
  "engagement_type": "hourly",
  "duration_hours": 8,
  "total_inr": 4400,
  "tomo_commission_base_inr": 660,
  "tomo_commission_inr": 66,
  "pass_through_inr": 3740,
  "pso_id_anonymized": "PSO-G4S-3Q9P",
  "training_level_band": "psara_grade_a_plus_first_aid",
  "background_check_band": "verified_plus_aadhaar",
  "checkin_iso": "2026-05-15T09:00:00+05:30",
  "checkout_iso": "2026-05-15T17:00:00+05:30",
  "signature_hmac_sha256": "…"
}

Failure cases

  • pso_no_show → emergency replacement within 30 min; partial refund if SLA breached.
  • misconduct_report → partner investigation + replacement; possible refund.
  • armed_license_lapsed → block engagement; refund.
  • recce_findings_high_threat → user advised to upgrade threat profile.

8. WIDGET

{
  "widget": "PersonalSecurityWidget",
  "header": {
    "engagement_strip": "Hourly · 8 hours · 1 PSO · Hyderabad",
    "threat_strip":     "Self-rated LOW · plain-clothes",
    "license_strip":    "PSARA verified · valid until 2028-06-30"
  },
  "regions": {
    "region_1_intelligence": ["Grade A training + first aid", "Aadhaar verified", "languages: EN/HI/TE", "NDA + chain-of-command signed before start"],
    "region_2_summary": "Start 9 AM tomorrow at home, return 5 PM",
    "region_3_visual": "pso_photo_url (post-consent only)",
    "region_4_now_pin": "Lock booking — 3 PSOs available tomorrow",
    "region_5_tomo_choices": [
      {"tier": "OK", "label": "SIS · ₹2,800 · Grade B PSO", "reason": "cheapest licensed"},
      {"tier": "GOOD", "label": "G4S · ₹4,400 · Grade A + first aid + Aadhaar verified", "reason": "balanced"},
      {"tier": "GREAT", "label": "Topsgrup Elite · ₹7,200 · ex-forces + court-cleared + encrypted radio", "reason": "highest safety"}
    ]
  },
  "footer_disclosures": [
    "Armed protection requires a separate state Arms Act licence — partner enforces this; we surface the badge.",
    "Photo and live-track are with PSO consent — partner agreement covers it; you'll see the consent screen before pickup.",
    "NDA and chain-of-command are signed digitally before the PSO starts the shift."
  ]
}

9. CACHING POLICY

  • Quote: 1h TTL.
  • PSARA license: 90d cache.
  • PSO badge profile: at partner; pointer at TOMO; refreshed per assignment.
  • Past engagements: 3 years on-device, encrypted.
  • Recce findings: at partner; encrypted; auto-delete 90 days post-engagement unless dispute open.

10. ERROR CODES

Code Meaning UI surface
ERR_PSARA_INVALID license expired/lapsed Drop option
ERR_PSO_BG_INSUFFICIENT bg band too low for tier Upgrade tier
ERR_ARMED_LICENSE_MISSING armed requested, individual licence absent Block engagement
ERR_FEMALE_PSO_UNAVAILABLE flag set, no female PSO Reschedule
ERR_NDA_NOT_SIGNED pre-engagement NDA missing Inline sign
ERR_PSO_NO_SHOW PSO didn't arrive Replacement within 30 min
ERR_RECCE_REQUIRED_NOT_DONE high threat, no recce Schedule recce
ERR_GENDER_PREF_UNSUPPORTED preference can't be honored Reschedule or override
ERR_TRAINING_LEVEL_MISMATCH partner can't supply requested level Drop option
ERR_AGENCY_OFFLINE partner API down Try next

11. SANDBOX → PRODUCTION CHECKLIST

  • Sandbox PSARA verify gating for state-aligned licenses.
  • Sandbox armed-license check for individual PSO file.
  • Sandbox female-PSO availability check.
  • Sandbox NDA + chain-of-command sign flow.
  • Sandbox PSO no-show replacement within 30 min.
  • Sandbox recce-request flow for high-threat.
  • Production PSARA database synced weekly per state.
  • Production court-record check supplier validated (if verified_plus_aadhaar_plus_court).
  • Production rate-limit: 30 active engagements / user / month (anti-abuse).
  • Production CPC HMAC-SHA256 5-min replay verified.
  • Production agency rotation tested at peak demand cities.

12. ANTI-FABRICATION RULES

  • NO paid_placement on agencies.
  • NO synthetic PSO photos.
  • NO claim of "ex-armed forces" without partner-attested service record.
  • NO bundling promo into hourly rate.
  • NO armed deployment without individual Arms Act licence on file.
  • NO TOMO-issued PSARA badge.
  • NO holding NDA or recce documents at TOMO beyond pointer.
  • NO synthetic court-record claim.
  • NO claim of police partnership — police escalation is via 100/112.
  • NO marketing language ("VIP-grade security").

13. REGULATORY FRAMING

  • PSARA 2005 + state rules — agency license + PSO training.
  • Arms Act 1959 + state rules — armed PSO requires individual licence + assignment letter.
  • Contract Labour Act 1970 — engagement type compliance.
  • Industrial Disputes Act / Shops & Establishments state rules — PSO duty hours.
  • Indian Penal Code §97–106 — private defence; PSO may act only in proportionate self-defence of principal.
  • CrPC — only police can detain; PSO may only restrain in moment of imminent threat.
  • DPDPA 2023 — PSO id + photo + recce + engagement details = personal data; partner is processor.
  • TOMO is router only — does NOT employ PSOs, does NOT issue licences, does NOT bear assault liability.