> ## Documentation Index
> Fetch the complete documentation index at: https://docs.everybite.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Models

> Complete reference for SmartMenu API data types

Complete reference for all SmartMenu API data types.

## Core Types

### Dish

The main dish object returned by SmartMenu search and dish queries.

```graphql theme={null}
type Dish {
  id: ID!
  name: String!
  description: String
  imageUrl: String
  servingSize: String
  servingSizeInGrams: Float
  createdAt: DateTime
  updatedAt: DateTime
  chainProductId: String
  """
  Grouped nutrition information for this dish.
  """
  nutrition: DishNutrition
  """
  Controls whether this dish should be displayed in the widget.
  """
  displayOnWidget: Boolean
  """
  Indicates whether the dish has any ingredients and can be customized.
  """
  isCustomizable: Boolean!
  """
  A list of dish cuisines.
  """
  cuisines: [Cuisine]!
  """
  A list of dish allergens.
  """
  allergens: [Allergen]!
  """
  A list of dish diets.
  """
  diets: [Diet]!
  """
  A list of dish preparation types.
  """
  preparationTypes: [PreparationType]!
  """
  A list of dish styles.
  """
  styles: [Style]!
  """
  A list of added ingredients.
  """
  addedIngredients: [Ingredient]!
  """
  Dish menu.
  """
  menu: Menu
  """
  Original category name from the menu (denormalized for display/filtering).
  """
  originalCategoryName: String
}
```

| Field                  | Type                | Description                                                                                      |
| ---------------------- | ------------------- | ------------------------------------------------------------------------------------------------ |
| `id`                   | ID!                 | EveryBite unique identifier                                                                      |
| `name`                 | String!             | Dish name                                                                                        |
| `description`          | String              | Dish description                                                                                 |
| `imageUrl`             | String              | URL to dish image                                                                                |
| `servingSize`          | String              | Human-readable serving size (e.g., "1 bowl")                                                     |
| `servingSizeInGrams`   | Float               | Serving size in grams                                                                            |
| `createdAt`            | DateTime            | When the dish was created                                                                        |
| `updatedAt`            | DateTime            | Last update timestamp                                                                            |
| `chainProductId`       | String              | Read-only. OLO global product ID — identical for the same dish across all locations in the chain |
| `nutrition`            | DishNutrition       | Grouped nutrition information for the dish                                                       |
| `displayOnWidget`      | Boolean             | Whether the dish is visible in the SmartMenu widget                                              |
| `isCustomizable`       | Boolean!            | Whether the dish supports ingredient-level customization                                         |
| `cuisines`             | \[Cuisine]!         | Cuisines associated with the dish                                                                |
| `allergens`            | \[Allergen]!        | Dish-level allergens                                                                             |
| `diets`                | \[Diet]!            | Diet classifications for the dish                                                                |
| `preparationTypes`     | \[PreparationType]! | How the dish is prepared (grilled, fried, etc.)                                                  |
| `styles`               | \[Style]!           | Style tags for the dish                                                                          |
| `addedIngredients`     | \[Ingredient]!      | Ingredient list used for nutrition and allergens                                                 |
| `menu`                 | Menu                | Menu this dish belongs to                                                                        |
| `originalCategoryName` | String              | Original menu category name from the partner system                                              |

### DishNutrition

Nutrition facts for a dish, as returned by the `Dish` type.

```graphql theme={null}
type DishNutrition {
  caloriesTotal: Float
  caloriesFromFat: Float
  fatTotal: Float
  fatSaturated: Float
  fatTrans: Float
  cholesterol: Float
  sodium: Float
  carbohydrates: Float
  dietaryFiber: Float
  sugar: Float
  protein: Float
  vitaminA: Float
  vitaminC: Float
  calcium: Float
  iron: Float
}
```

| Field             | Type  | Unit | Description         |
| ----------------- | ----- | ---- | ------------------- |
| `caloriesTotal`   | Float | kcal | Total calories      |
| `caloriesFromFat` | Float | kcal | Calories from fat   |
| `fatTotal`        | Float | g    | Total fat           |
| `fatSaturated`    | Float | g    | Saturated fat       |
| `fatTrans`        | Float | g    | Trans fat           |
| `cholesterol`     | Float | mg   | Cholesterol         |
| `sodium`          | Float | mg   | Sodium              |
| `carbohydrates`   | Float | g    | Total carbohydrates |
| `dietaryFiber`    | Float | g    | Dietary fiber       |
| `sugar`           | Float | g    | Sugars              |
| `protein`         | Float | g    | Protein             |
| `vitaminA`        | Float | IU   | Vitamin A           |
| `vitaminC`        | Float | mg   | Vitamin C           |
| `calcium`         | Float | mg   | Calcium             |
| `iron`            | Float | mg   | Iron                |

### Allergen

Allergen information returned for a dish.

```graphql theme={null}
type Allergen {
  id: ID!
  name: String!
  description: String
  confidence: Float
}
```

| Field         | Type    | Description                  |
| ------------- | ------- | ---------------------------- |
| `id`          | ID!     | Allergen identifier          |
| `name`        | String! | Allergen name                |
| `description` | String  | Human-readable description   |
| `confidence`  | Float   | Confidence score (0.0 - 1.0) |

### Diet

Dietary classification for a dish.

```graphql theme={null}
type Diet {
  id: ID!
  name: String!
  description: String
  confidence: Float
}
```

| Field         | Type    | Description                  |
| ------------- | ------- | ---------------------------- |
| `id`          | ID!     | Diet identifier              |
| `name`        | String! | Diet name                    |
| `description` | String  | Human-readable description   |
| `confidence`  | Float   | Confidence score (0.0 - 1.0) |

### Ingredient

Individual ingredient with detailed nutrition and allergen tracking. This is a simplified view of our deeper [seven-layer ingredient hierarchy](/docs/concepts/ingredient-intelligence) that traces dishes back through recipes, prep recipes, and ingredient specifications.

```graphql theme={null}
type Ingredient {
  id: ID!
  name: String!
  brand: String
  description: String
  supplier: String
  caloriesTotalPer100g: String
  caloriesFromFatPer100g: String
  fatTotalPer100g: String
  fatSaturatedPer100g: String
  fatTransPer100g: String
  cholesterolPer100g: String
  carbohydratesPer100g: String
  sugarPer100g: String
  proteinPer100g: String
  vitaminAPer100g: String
  vitaminCPer100g: String
  calciumPer100g: String
  ironPer100g: String
  containsEgg: Boolean
  containsFish: Boolean
  containsMilk: Boolean
  containsSesame: Boolean
  containsShellfish: Boolean
  containsWheat: Boolean
  containsPeanut: Boolean
  containsSoy: Boolean
  containsTreeNut: Boolean
  isIncluded: Boolean!
  isKeyIngredient: Boolean!
  quantity: String!
  unit: String!
  amountGrams: Float!
}
```

| Field                    | Type     | Description                                                   |
| ------------------------ | -------- | ------------------------------------------------------------- |
| `id`                     | ID!      | Ingredient identifier                                         |
| `name`                   | String!  | Ingredient name                                               |
| `brand`                  | String   | Brand name (if available)                                     |
| `description`            | String   | Ingredient description                                        |
| `supplier`               | String   | Ingredient supplier                                           |
| `caloriesTotalPer100g`   | String   | Calories per 100g                                             |
| `caloriesFromFatPer100g` | String   | Calories from fat per 100g                                    |
| `fatTotalPer100g`        | String   | Total fat per 100g                                            |
| `fatSaturatedPer100g`    | String   | Saturated fat per 100g                                        |
| `fatTransPer100g`        | String   | Trans fat per 100g                                            |
| `cholesterolPer100g`     | String   | Cholesterol per 100g                                          |
| `carbohydratesPer100g`   | String   | Carbohydrates per 100g                                        |
| `sugarPer100g`           | String   | Sugar per 100g                                                |
| `proteinPer100g`         | String   | Protein per 100g                                              |
| `vitaminAPer100g`        | String   | Vitamin A per 100g                                            |
| `vitaminCPer100g`        | String   | Vitamin C per 100g                                            |
| `calciumPer100g`         | String   | Calcium per 100g                                              |
| `ironPer100g`            | String   | Iron per 100g                                                 |
| `containsEgg`            | Boolean  | Whether the ingredient contains egg                           |
| `containsFish`           | Boolean  | Whether the ingredient contains fish                          |
| `containsMilk`           | Boolean  | Whether the ingredient contains milk                          |
| `containsSesame`         | Boolean  | Whether the ingredient contains sesame                        |
| `containsShellfish`      | Boolean  | Whether the ingredient contains shellfish                     |
| `containsWheat`          | Boolean  | Whether the ingredient contains wheat                         |
| `containsPeanut`         | Boolean  | Whether the ingredient contains peanuts                       |
| `containsSoy`            | Boolean  | Whether the ingredient contains soy                           |
| `containsTreeNut`        | Boolean  | Whether the ingredient contains tree nuts                     |
| `isIncluded`             | Boolean! | Whether this ingredient is included in the base configuration |
| `isKeyIngredient`        | Boolean! | Whether this is a featured/key ingredient                     |
| `quantity`               | String!  | Quantity (human readable)                                     |
| `unit`                   | String!  | Quantity unit (e.g., "oz", "g")                               |
| `amountGrams`            | Float!   | Quantity converted to grams                                   |

### WidgetCategory

Menu category used by SmartMenu widgets.

```graphql theme={null}
type WidgetCategory {
  name: String!
  count: Int
  ordinal: Int
}
```

| Field     | Type    | Description                       |
| --------- | ------- | --------------------------------- |
| `name`    | String! | Category name                     |
| `count`   | Int     | Number of dishes in this category |
| `ordinal` | Int     | Display order in the UI           |

***

## Enums

### AllergenType

FDA Big 9 allergens.

```graphql theme={null}
enum AllergenType {
  DAIRY
  EGG
  FISH
  SHELLFISH
  TREE_NUT
  PEANUT
  WHEAT
  SOY
  SESAME
}
```

| Value       | Description                        |
| ----------- | ---------------------------------- |
| `DAIRY`     | Milk and milk products             |
| `EGG`       | Eggs and egg products              |
| `FISH`      | Fish (cod, salmon, etc.)           |
| `SHELLFISH` | Shellfish (shrimp, crab, etc.)     |
| `TREE_NUT`  | Tree nuts (almonds, walnuts, etc.) |
| `PEANUT`    | Peanuts                            |
| `WHEAT`     | Wheat and wheat products           |
| `SOY`       | Soy and soy products               |
| `SESAME`    | Sesame seeds                       |

### DietType

Dietary classifications.

```graphql theme={null}
enum DietType {
  VEGAN
  VEGETARIAN
  PESCATARIAN
}
```

| Value         | Description        |
| ------------- | ------------------ |
| `VEGAN`       | No animal products |
| `VEGETARIAN`  | No meat or fish    |
| `PESCATARIAN` | Fish but no meat   |

### MatchStatus

Result of matching dish against preferences.

```graphql theme={null}
enum MatchStatus {
  MATCH
  ALMOST_MATCH
  NOT_MATCH
}
```

| Value          | Description                        |
| -------------- | ---------------------------------- |
| `MATCH`        | Fully meets all preferences        |
| `ALMOST_MATCH` | Partial match with exceptions      |
| `NOT_MATCH`    | Does not meet critical preferences |

## Input Types

### PreferencesInput

Dietary preferences for filtering.

```graphql theme={null}
input PreferencesInput {
  diets: [DietType!]
  excludeAllergens: [AllergenType!]
  excludeIngredients: [String!]
  includeIngredients: [String!]
  calorieRange: RangeInput
  nutrientRanges: NutrientRangesInput
  nutrientPreferences: [NutrientPreference!]
}
```

### RangeInput

Numeric range for filtering.

```graphql theme={null}
input RangeInput {
  min: Int
  max: Int
}
```

### NutrientRangesInput

Nutrient-specific ranges.

```graphql theme={null}
input NutrientRangesInput {
  protein: RangeInput
  carbohydrates: RangeInput
  fatTotal: RangeInput
}
```

### PaginationInput

Cursor-based pagination.

```graphql theme={null}
input PaginationInput {
  first: Int    # Number of results (max 100)
  after: String # Cursor from previous page
}
```

### StartSessionInput

Session initialization parameters.

```graphql theme={null}
input StartSessionInput {
  """
  Partner guest identifier.
  """
  guestId: String

  """
  EveryBite Passport identifier.
  """
  passportId: String

  """
  Guest email address.
  """
  email: String
}
```

***

## Response Types

### SearchResult

Search results with grouped matches.

```graphql theme={null}
type SearchResult {
  matches: [SearchMatch!]!
  almostMatches: [SearchMatch!]!
  notMatches: [SearchMatch!]!
  counts: SearchCounts!
  pageInfo: PageInfo!
}
```

### SearchMatch

Individual dish with match status.

```graphql theme={null}
type SearchMatch {
  dish: Dish!
  matchStatus: MatchStatus!
  matchReasons: [String!]
}
```

### SearchCounts

Summary counts for search results.

```graphql theme={null}
type SearchCounts {
  matches: Int!
  almostMatches: Int!
  notMatches: Int!
  total: Int!
}
```

### PageInfo

Pagination information.

```graphql theme={null}
type PageInfo {
  hasNextPage: Boolean!
  hasPreviousPage: Boolean!
  startCursor: String
  endCursor: String
}
```

### SmartMenuFilterOptions

Available filter options for a chain's SmartMenu widget.

```graphql theme={null}
type SmartMenuFilterOptions {
  diets: [WidgetDietaryPreference!]!
  allergens: [WidgetAllergen!]!
  nutrients: [SmartMenuNutrientPreference!]!
}
```

### Session

Session initialization response.

```graphql theme={null}
type Session {
  """
  Stable, server-generated session identifier.
  """
  sessionId: String!
}
```

***

## Scalar Types

### DateTime

ISO 8601 date-time string.

```
"2026-01-19T11:00:00.000Z"
```

### ID

Unique identifier (string format).

```
"dish_001"
"nutr_abc123"
```
