TOMO
BETA Partner connections are in beta and these docs are under review. Anything marked planned is not built yet — we confirm with you what is live before your service goes live.

TOMO Manifest Reference — Every Field Documented

Audience: every TOMO partner. The manifest is your declaration of intent coverage. It tells TOMO which intents you serve, where, at what price, and how you rate yourself on TTBS (time, taste, budget, safety). Our team reviews it before your connection goes live.

How it is submitted today: there is no self-serve partner dashboard yet. After your application is approved, our team submits your manifest with you. Under the hood it is one call — POST /api/v1/business/tier1/manifest/<your_account_id> — with the body below. (planned: a self-serve manifest editor.)


1. The body

{
  "businessName": "Example Stays",
  "intents": [
    {
      "intent":              "travel.book_hotel",
      "domain":              "travel",
      "description":         "Boutique stays",
      "pricing":             { "min": 3500, "max": 18000, "currency": "INR" },
      "service_area":        ["Coorg", "Munnar"],
      "ttbs_signals":        { "time": 0.4, "taste": 0.9, "budget": 0.3, "safety": 0.85 },
      "availability":        "24x7",
      "completion_callback": "https://www.automobnxt.com/api/v1/cpc/mcp_provider/<your_account_id>",
      "widget_type":         "travel_listing_results"
    }
  ],
  "submitForReview": true
}

2. businessName

Type: string. REQUIRED. The display name shown in chat, e.g. "Example Stays".


3. intents[] — the heart of the manifest

Each entry declares one intent you serve. Multiple entries are allowed (you can serve travel.book_hotel AND travel.book_flight). At least one is REQUIRED.

Field Type Checked when you submit? Notes
intent string REQUIRED exact full ID from _INTENT_CATALOG.md
domain string REQUIRED the intent's namespace, e.g. food for food.order_delivery
pricing object REQUIRED — min and max are numbers, min ≤ max floor + ceiling per completed order
service_area array REQUIRED, ≥1 entry cities or postal codes
description string stored, reviewed by our team a short description of what you offer
ttbs_signals object stored, reviewed by our team self-rated position on 4 axes (§6)
availability string stored, reviewed by our team hours of operation
completion_callback URL stored, reviewed by our team TOMO's completion URL for you (§8)
widget_type string stored, reviewed by our team matches the intent's §9 widget_type

4. pricing

"pricing": { "min": 500, "max": 50000, "currency": "INR" }

min and max are your typical floor and ceiling for a single completed order. TOMO stores your price range; today, ranking uses your ttbs_signals, weighted for the domain (§6). Amounts are in INR in v1 of this contract.

Be honest. Set ranges that reflect your real prices — our team checks them during review.


5. service_area

"service_area": ["Bangalore", "Hyderabad", "Mumbai"]
"service_area": ["560001", "500081", "400001"]
"service_area": ["Bangalore", "560001", "Hyderabad", "500081"]

REQUIRED, ≥1 entry. City names or postal codes, or a mix. For a hyper-local partner (a single restaurant or salon), postal codes alone are fine.


6. ttbs_signals — your self-rating

"ttbs_signals": { "time": 0.6, "taste": 0.8, "budget": 0.5, "safety": 0.7 }

Four numbers, each 0.0-1.0. They tell TOMO how YOU position yourself on each axis. Today TOMO ranks on these signals, weighted for the domain and for the person asking. (planned: learning from delivered results.) Ranking is source-blind: no partner can pay to rank higher.

Axis Meaning High value (0.8-1.0) Low value (0.0-0.3)
time how fast you fulfil <30 min average >2 hours average
taste quality / curation premium curation broad, no curation
budget value-for-money positioning budget-friendly premium-priced
safety trust + verification depth full KYC + audits minimal verification

Our team checks your signals during review. Example honest declarations:

# A broad, premium-positioned hotel platform (slow confirm)
{ "time": 0.4, "taste": 0.85, "budget": 0.5, "safety": 0.8 }

# A volume, budget-positioned hotel chain (fast confirm)
{ "time": 0.7, "taste": 0.4, "budget": 0.85, "safety": 0.5 }

# Boutique homestay platform (slow, premium, expensive, very safe)
{ "time": 0.3, "taste": 0.95, "budget": 0.2, "safety": 0.95 }

7. availability

"availability": "24x7"
"availability": "Mon-Sat 08:00-22:00 IST"
"availability": "Mon-Fri 09:00-18:00 IST; Sat 10:00-14:00 IST; Sun closed"

Free text. If you say 24x7, a person must answer at all hours.


8. completion_callback

"completion_callback": "https://www.automobnxt.com/api/v1/cpc/mcp_provider/<your_account_id>"

Always TOMO's completion URL, not your endpoint. You don't receive callbacks here — you POST to it when an order completes (see COMPLETION_CONTRACT.md).

The pattern is fixed: /api/v1/cpc/mcp_provider/<your_account_id>. Our team gives you your account ID with your keys.


9. widget_type

"widget_type": "travel_listing_results"

Must match the widget_type declared in your intent's §9. If you serve travel.book_hotel, your widget_type is travel_listing_results. The widget is fixed per intent so people see the same layout whichever business answers.


10. What lives in your MCP server instead

These are declared in each tool's _meta.tomo block (see MCP_SPEC.md), or fixed by the intent spec — not in the manifest:

  • pricing and ttbs_signals per tool — in _meta.tomo
  • TTBS weighting per domain — fixed by TOMO
  • Caching policy — fixed by intent §9
  • Anti-fabrication rules — fixed by the intent spec

11. What TOMO checks when you submit

[ ] businessName is present
[ ] at least one intent
[ ] every intent has `intent` and `domain`
[ ] every pricing.min and pricing.max is a number, with min ≤ max
[ ] every intent has at least one service_area

A failed check returns 400 with a plain message (for example Intent "travel.book_hotel" pricing is invalid (min must be ≤ max)). Everything else is reviewed by our team.

submitForReview: true → status pending_review and a review entry for our team. submitForReview: false → saved as draft.


12. After you submit

Your manifest is saved as pending_review. Our team reviews it and tells you the outcome by email — with notes on what to fix if it needs changes.

The latest manifest you submit replaces the previous one and goes back to pending_review.

An approved manifest does not by itself send anyone your way: your connection is switched on only after our team has tested it with you inside TOMO (see SANDBOX_TO_PROD_CHECKLIST.md).


13. A multi-intent example

A delivery business serving food delivery and table bookings:

{
  "businessName": "Example Delivery Co.",
  "intents": [
    {
      "intent": "food.order_delivery",
      "domain": "food",
      "description": "Restaurant-to-doorstep food delivery",
      "pricing": { "min": 120, "max": 4000, "currency": "INR" },
      "service_area": ["Bangalore", "Hyderabad"],
      "ttbs_signals": { "time": 0.85, "taste": 0.65, "budget": 0.55, "safety": 0.7 },
      "availability": "24x7",
      "completion_callback": "https://www.automobnxt.com/api/v1/cpc/mcp_provider/<your_account_id>",
      "widget_type": "food_menu_results"
    },
    {
      "intent": "food.book_dine_in",
      "domain": "food",
      "description": "Dine-in reservations",
      "pricing": { "min": 400, "max": 8000, "currency": "INR" },
      "service_area": ["Bangalore", "Hyderabad", "Mumbai"],
      "ttbs_signals": { "time": 0.5, "taste": 0.7, "budget": 0.55, "safety": 0.7 },
      "availability": "Mon-Sun 11:00-23:00 IST",
      "completion_callback": "https://www.automobnxt.com/api/v1/cpc/mcp_provider/<your_account_id>",
      "widget_type": "food_dine_in_results"
    }
  ],
  "submitForReview": true
}

14. Common mistakes

intent ID typo

e.g., travel.book_hotels (plural) doesn't exist; only travel.book_hotel (singular). Our team will send it back.

domain mismatch

If your intent is food.order_delivery, domain is food, not restaurant or delivery.

pricing.min above pricing.max

Rejected at submit with a 400.

TTBS signals at 1.0 across all axes

Self-inflation. Our team will ask you to correct it. Being 0.6 on time and 0.9 on taste is more useful than being 1.0 on everything.

widget_type not matching the intent

You declared travel_listing_results for food.order_delivery. The intent spec mandates food_menu_results.


15. References


Built by AUTOMOBNXT · DPIIT Recognised Startup · 2026.