Skip To Main Content
All modules

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.

Mealmeal

One logged meal at a restaurant, with dish ratings. The same operations reach the restaurants on the user's list, visited or want-to-try (type 'restaurant').

dining_findFindthrough vritto_find

Read Dining: one record by id, restaurants filtered by status, city, cuisine or text (with meal aggregates), or meals filtered by restaurant, dates or dish text. No filter gives headline counts, top restaurants and recent meals. Use for dining QUESTIONS; never to look up an ID before logging a meal, dining_add resolves a restaurant by name on its own.

Note: No filter returns headline counts, top restaurants and recent meals; type 'restaurant' with status 'want_to_try' and a city reads the want-to-try list.

FieldTypeDescription
typeone of meal, restaurantWhich records to read; omit for both.
idstringReturn just this record.
statusone of want_to_try, visited, favoriteType 'restaurant': only these.
citystringType 'restaurant': only in this city.
cuisinestringType 'restaurant': only with this cuisine tag.
restaurantIdstringType 'meal': meals at this restaurant.
restaurantNamestringType 'meal': meals at this restaurant, by name.
fromstringType 'meal': earliest date, inclusive.
tostringType 'meal': latest date, inclusive. ALWAYS pass from/to when the question concerns a period.
querystringText to match: a restaurant, cuisine, recommender, dish, occasion or note.
limitintegerRows to return per type, default 25.
detailone of summary, full"summary" (default) compact rows; "full" every restaurant and meal with dishes, companions, costs, and notes.
Example input
{}
dining_addCreate or Updatethrough vritto_create or vritto_update

Add one record in a single call: a meal (pass the restaurant by NAME, restaurantName, as the user said it: it is matched case-insensitively or created, so never look up an ID first; date is the only other requirement; capture every dish named, ratings only when stated), or a restaurant for the list (type 'restaurant': name, city, recommendedBy). A real record.id updates that record instead.

Note: Pass a meal's restaurant by name as the user said it; Vritto finds or creates it.

FieldTypeDescription
typeone of meal, restaurantRecord type: 'meal' (default) one meal out, with its dishes; 'restaurant' a place on the user's list, visited or want-to-try.
record*objectThe record's fields; a meal needs a restaurant (name or id) and a date, a restaurant its name.
record.idstringLeave out to add; a real id updates that record, only the fields you send change.
record.namestringType 'restaurant': its name. Required for a restaurant.
record.cuisineslist of stringFree tags, e.g. ['Sri Lankan'].
record.priceLevelinteger
record.statusone of want_to_try, visited, favoriteType 'restaurant': defaults to want_to_try; the first logged meal flips it to visited.
record.recommendedBystringWho recommended it + what to order.
record.recommendedByPersonIdstringPeople ID when resolvable.
record.citystring
record.countrystringISO 3166-1 alpha-2 country code, e.g. 'US'.
record.addressstring
record.websitestringRestaurant website URL.
record.phonestringPhone number.
record.placeKeystringPlaces module place key, e.g. 'google:<id>' or 'manual:<uuid>'.
record.notesstring
record.restaurantIdstringUse 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.restaurantNamestringRestaurant name, when no ID is known. Matches an existing restaurant case-insensitively, or creates one.
record.datestringDefaults should be TODAY when the user says 'just had'.
record.mealTypeone of breakfast, brunch, lunch, dinner, snack, drinks
record.ratingnumberThe one meal verdict.
record.disheslist of objectDish-level ratings are the point, capture each dish the user mentions.
record.totalCostAmountnumber
record.totalCostCurrencystring
record.companionPersonIdslist of stringPeople IDs: resolve names first.
record.occasionstring
record.tripIdstringTrip link (resolve via trips_find).
record.sourceone of manual, sahai, gmail, bankWhere 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,
    "totalCostAmount": 96,
    "totalCostCurrency": "USD",
    "dishes": [
      {
        "name": "Pork adobo",
        "rating": 5,
        "wouldOrderAgain": true
      },
      {
        "name": "Ube basque cake",
        "rating": 4
      }
    ]
  }
}
dining_changeUpdatethrough vritto_update

Change one meal or restaurant by record.id (set type 'restaurant' for a restaurant); only sent fields change. A meal's dishes are written whole: echo each kept dish's id. Resolve the id with dining_find first, or reuse the id a dining_add just returned.

Note: A meal's dishes are written whole: echo each kept dish's id.

FieldTypeDescription
typeone of meal, restaurantRecord type: 'meal' (default) one meal out, with its dishes; 'restaurant' a place on the user's list, visited or want-to-try.
record*objectThe record's id plus the fields to change.
record.id*stringRecord ID from a prior dining_find result, never invented.
record.namestringType 'restaurant': its name. Required for a restaurant.
record.cuisineslist of stringFree tags, e.g. ['Sri Lankan'].
record.priceLevelinteger
record.statusone of want_to_try, visited, favoriteType 'restaurant': defaults to want_to_try; the first logged meal flips it to visited.
record.recommendedBystringWho recommended it + what to order.
record.recommendedByPersonIdstringPeople ID when resolvable.
record.citystring
record.countrystringISO 3166-1 alpha-2 country code, e.g. 'US'.
record.addressstring
record.websitestringRestaurant website URL.
record.phonestringPhone number.
record.placeKeystringPlaces module place key, e.g. 'google:<id>' or 'manual:<uuid>'.
record.notesstring
record.restaurantIdstringUse 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.restaurantNamestringRestaurant name, when no ID is known. Matches an existing restaurant case-insensitively, or creates one.
record.datestringDefaults should be TODAY when the user says 'just had'.
record.mealTypeone of breakfast, brunch, lunch, dinner, snack, drinks
record.ratingnumberThe one meal verdict.
record.disheslist of objectDish-level ratings are the point, capture each dish the user mentions.
record.totalCostAmountnumber
record.totalCostCurrencystring
record.companionPersonIdslist of stringPeople IDs: resolve names first.
record.occasionstring
record.tripIdstringTrip link (resolve via trips_find).
record.sourceone of manual, sahai, gmail, bankWhere the record came from. Set by the ingestion pipeline; leave unset.
Example input
{
  "record": {
    "id": "meal_123",
    "rating": 5
  }
}
dining_removeDeletethrough vritto_delete

Remove (archive) one meal, or one restaurant from the list (its meals keep their history). Only for explicit removals; resolve the id first.

Note: Set type 'restaurant' to remove a restaurant; its meals keep their history.

FieldTypeDescription
idstringThe record to remove.
typeone of meal, restaurantRecord type: 'meal' (default) one meal out, with its dishes; 'restaurant' a place on the user's list, visited or want-to-try.
mealIdstringOlder name for a meal's id.
restaurantIdstringOlder name for a restaurant's id.