Dining
Fields marked * are required. Updates keep every field they are not given. An AI app can ask vritto_describe for the same details, filtered to what its connection may use.
Restaurantrestaurant
A restaurant on the user's list, visited or want-to-try.
dining_queryDiningFindthrough vritto_findList restaurants (with status, cuisines, city, and meal aggregates) and meals. Rows are compact summaries plus headline counts, top restaurants and recent meals; pass detail 'full' only when the user needs dish-level details, companions, costs, or notes. Use for dining QUESTIONS. Do not call this to look up an ID before logging a meal: dining_logMeal resolves a restaurant by name on its own.
| Field | Type | Description |
|---|---|---|
| detail | one of summary, full | Response shape: "summary" (default, headline counts + top restaurants + recent meals) or "full" (every restaurant and meal with dishes, companions, costs, and notes). |
dining_upsertRestaurantCreate or Updatethrough vritto_create or vritto_updateAdd or update a restaurant, the 'add to my list' verb. Omit record.id to create (name required); include a real record.id to update, sent fields merge.
| Field | Type | Description |
|---|---|---|
| record* | object | Restaurant fields; name required when creating. |
| record.id | string | Existing restaurant ID to update. Omit to create. |
| record.name | string | Required when creating. |
| record.cuisines | list of string | Free tags, e.g. ['Sri Lankan']. |
| record.priceLevel | integer | |
| record.status | one of want_to_try, visited, favorite | Defaults to want_to_try; first logged meal auto-flips to visited. |
| record.recommendedBy | string | Who recommended it + what to order. |
| record.recommendedByPersonId | string | People ID when resolvable. |
| record.city | string | |
| record.country | string | ISO 3166-1 alpha-2 country code, e.g. 'US'. |
| record.address | string | |
| record.website | string | Restaurant website URL. |
| record.phone | string | Phone number. |
| record.placeKey | string | Places module place key, e.g. 'google:<id>' or 'manual:<uuid>'. |
| record.notes | string |
Example input
{
"record": {
"name": "Kasama",
"cuisines": [
"Filipino"
],
"status": "want_to_try",
"city": "Chicago",
"recommendedBy": "Priya"
}
}dining_deleteRestaurantDeletethrough vritto_deleteDelete (archive) one restaurant from the list. Meals keep their history. Only for explicit removals; resolve the ID first.
| Field | Type | Description |
|---|---|---|
| restaurantId* | string | Restaurant ID from a prior dining_queryDining result, never invented. |
Mealmeal
One logged meal at a restaurant, with dish ratings.
dining_logMealCreate or Updatethrough vritto_create or vritto_updateLog or update one meal in a single call. Pass the restaurant by NAME (restaurantName) exactly as the user said it, an existing restaurant is matched case-insensitively, or a new one is created, so you never need to look up an ID first. Only date is otherwise required. Capture every dish the user names, with ratings only when stated.
Note: Pass the restaurant by name as the user said it; Vritto finds or creates it.
| Field | Type | Description |
|---|---|---|
| record* | object | Meal fields; restaurantId + date required when creating. |
| record.id | string | Existing meal ID to update. Omit to create. |
| record.restaurantId | string | Use ONLY when you already know the ID from earlier in this conversation. Never call a query tool just to obtain it, send restaurantName instead. |
| record.restaurantName | string | Restaurant name, when no ID is known. Matches an existing restaurant case-insensitively, or creates one. |
| record.date | string | Defaults should be TODAY when the user says 'just had'. |
| record.mealType | one of breakfast, brunch, lunch, dinner, snack, drinks | |
| record.rating | number | The one meal verdict. |
| record.dishes | list of object | Dish-level ratings are the point, capture each dish the user mentions. |
| record.totalCostAmount | number | |
| record.totalCostCurrency | string | |
| record.companionPersonIds | list of string | People IDs: resolve names first. |
| record.occasion | string | |
| record.tripId | string | Trip link (resolve via trips_queryTripsDashboard). |
| record.notes | string | |
| record.source | one of manual, sahai, gmail, bank | Where the record came from. Set by the ingestion pipeline; leave unset. |
Example input
{
"record": {
"restaurantName": "Kasama",
"date": "2026-09-25",
"mealType": "dinner",
"rating": 4.5,
"dishes": [
{
"name": "Pork adobo",
"rating": 5,
"wouldOrderAgain": true
},
{
"name": "Ube basque cake",
"rating": 4
}
]
}
}dining_deleteMealDeletethrough vritto_deleteDelete (archive) one logged meal. Only for explicit removals; resolve the ID first.
| Field | Type | Description |
|---|---|---|
| mealId* | string | Meal ID from dining_queryDining. |