Skip to main content
Complete reference for all SmartMenu API data types.

Core Types

Dish

The main dish object returned by search and dish queries.
type Dish {
  id: ID!
  partnerDishId: String!
  chainId: String!
  name: String!
  description: String
  category: String
  imageUrl: String
  priceCents: Int
  nutrition: Nutrition
  allergens: [Allergen!]!
  diets: [Diet!]!
  ingredients: [Ingredient!]
  isAvailable: Boolean!
  isCustomizable: Boolean!
  customizationGroups: [CustomizationGroup!]
  updatedAt: DateTime!
}
FieldTypeDescription
idID!EveryBite unique identifier
partnerDishIdString!Partner’s dish ID (Olo, Toast)
chainIdString!Restaurant chain identifier
nameString!Dish name
descriptionStringDish description
categoryStringMenu category
imageUrlStringURL to dish image
priceCentsIntPrice in cents (from partner)
nutritionNutritionNutrition data (may be null)
allergens[Allergen!]!List of allergens
diets[Diet!]!Applicable diets
ingredients[Ingredient!]Ingredient list
isAvailableBoolean!Currently available
isCustomizableBoolean!Supports BYO customization
customizationGroups[CustomizationGroup!]BYO options (if customizable)
updatedAtDateTime!Last update timestamp

Nutrition

Nutrition facts for a dish.
type Nutrition {
  calories: Int
  fatTotal: Float
  fatSaturated: Float
  fatTrans: Float
  cholesterol: Float
  sodium: Float
  carbohydrates: Float
  dietaryFiber: Float
  sugar: Float
  protein: Float
}
FieldTypeUnitDescription
caloriesIntkcalTotal calories
fatTotalFloatgTotal fat
fatSaturatedFloatgSaturated fat
fatTransFloatgTrans fat
cholesterolFloatmgCholesterol
sodiumFloatmgSodium
carbohydratesFloatgTotal carbohydrates
dietaryFiberFloatgDietary fiber
sugarFloatgSugars
proteinFloatgProtein

Allergen

Allergen information with source tracking.
type Allergen {
  type: AllergenType!
  displayName: String!
  source: String
  confidence: Float!
}
FieldTypeDescription
typeAllergenType!Allergen type enum
displayNameString!Human-readable name
sourceStringIngredient source (e.g., “Goat Cheese”)
confidenceFloat!Confidence score (0.0 - 1.0)

Diet

Dietary classification.
type Diet {
  type: DietType!
  displayName: String!
  confidence: Float!
}
FieldTypeDescription
typeDietType!Diet type enum
displayNameString!Human-readable name
confidenceFloat!Confidence score (0.0 - 1.0)

Ingredient

Individual ingredient with allergen tracking. This is a simplified view of our deeper seven-layer ingredient hierarchy that traces dishes back through recipes, prep recipes, and ingredient specifications.
type Ingredient {
  id: ID!
  name: String!
  isKeyIngredient: Boolean!
  allergens: [AllergenType!]!
}
FieldTypeDescription
idID!Ingredient identifier
nameString!Ingredient name
isKeyIngredientBoolean!Featured ingredient
allergens[AllergenType!]!Allergens in this ingredient

Category

Menu category.
type Category {
  name: String!
  count: Int!
  ordinal: Int!
  imageUrl: String
}
FieldTypeDescription
nameString!Category name
countInt!Number of dishes
ordinalInt!Display order (0 = first)
imageUrlStringCategory image URL

Enums

AllergenType

FDA Big 9 allergens.
enum AllergenType {
  DAIRY
  EGG
  FISH
  SHELLFISH
  TREE_NUT
  PEANUT
  WHEAT
  SOY
  SESAME
}
ValueDescription
DAIRYMilk and milk products
EGGEggs and egg products
FISHFish (cod, salmon, etc.)
SHELLFISHShellfish (shrimp, crab, etc.)
TREE_NUTTree nuts (almonds, walnuts, etc.)
PEANUTPeanuts
WHEATWheat and wheat products
SOYSoy and soy products
SESAMESesame seeds

DietType

Dietary classifications.
enum DietType {
  VEGAN
  VEGETARIAN
  PESCATARIAN
}
ValueDescription
VEGANNo animal products
VEGETARIANNo meat or fish
PESCATARIANFish but no meat

MatchStatus

Result of matching dish against preferences.
enum MatchStatus {
  MATCH
  ALMOST_MATCH
  NOT_MATCH
}
ValueDescription
MATCHFully meets all preferences
ALMOST_MATCHPartial match with exceptions
NOT_MATCHDoes not meet critical preferences

Platform

User’s platform.
enum Platform {
  IOS
  ANDROID
  WEB
  KIOSK
  POS
  VOICE
  OTHER
}

Input Types

PreferencesInput

Dietary preferences for filtering.
input PreferencesInput {
  diets: [DietType!]
  excludeAllergens: [AllergenType!]
  excludeIngredients: [String!]
  includeIngredients: [String!]
  calorieRange: RangeInput
  nutrientRanges: NutrientRangesInput
  nutrientPreferences: [NutrientPreference!]
}

RangeInput

Numeric range for filtering.
input RangeInput {
  min: Int
  max: Int
}

NutrientRangesInput

Nutrient-specific ranges.
input NutrientRangesInput {
  protein: RangeInput
  carbohydrates: RangeInput
  fatTotal: RangeInput
}

PaginationInput

Cursor-based pagination.
input PaginationInput {
  first: Int    # Number of results (max 100)
  after: String # Cursor from previous page
}

StartSessionInput

Session initialization parameters.
input StartSessionInput {
  chainId: String!
  restaurantId: String
  platform: Platform!
  guestId: String
  passportId: String
  appVersion: String
}

Response Types

SearchResult

Search results with grouped matches.
type SearchResult {
  matches: [DishResult!]!
  almostMatches: [DishResult!]!
  notMatches: [DishResult!]!
  counts: SearchCounts!
  pageInfo: PageInfo!
}

DishResult

Individual dish with match status.
type DishResult {
  dish: Dish!
  matchStatus: MatchStatus!
  matchReasons: [String!]
}

SearchCounts

Summary counts for search results.
type SearchCounts {
  matches: Int!
  almostMatches: Int!
  notMatches: Int!
  total: Int!
}

PageInfo

Pagination information.
type PageInfo {
  hasNextPage: Boolean!
  hasPreviousPage: Boolean!
  startCursor: String
  endCursor: String
}

FilterOptions

Available filter options for a chain.
type FilterOptions {
  diets: [DietOption!]!
  allergens: [AllergenOption!]!
  nutrients: [NutrientOption!]!
  categories: [Category!]!
}

SessionResponse

Session initialization response with GuestIQ intelligence.
type SessionResponse {
  sessionId: String!
  chainId: String!
  restaurantId: String
  platform: Platform!
  appVersion: String
  guestiq: GuestIQ             # Complete guest intelligence (if requested)
}

GuestIQ Types

GuestIQ returns complete guest intelligence at session creation. This data is aggregated across all platforms and third-party loyalty systems.

Confidence Model

GuestIQ data falls into three categories:
CategoryConfidenceDescription
VerifiedNo score neededDirect from source of truth (order history, loyalty data)
ObservedHigh (0.7-1.0)Derived from 25+ observations
InferredVariable (0.1-0.7)Predicted from limited data

GuestIQ

type GuestIQ {
  identity: GuestIdentity!
  behavior: GuestBehavior
  demographics: GuestDemographics
  orderHistory: OrderHistory
  segments: GuestSegments
  cohorts: [String!]
  targetedDishes: [TargetedDish!]
  loyaltyTags: [LoyaltyTag!]
  touchpoints: Touchpoints
  recommendations: [Recommendation!]
  dataQuality: DataQuality!
}

DataQuality

type DataQuality {
  observationCount: Int!           # Total interactions observed
  firstSeen: DateTime
  lastSeen: DateTime
  lastUpdated: DateTime            # When profile was last updated
}

GuestIdentity

type GuestIdentity {
  guestId: String!
  identifiedVia: IdentificationMethod!
  isReturning: Boolean!
}

enum IdentificationMethod {
  LOYALTY_ID
  PASSPORT_ID
  EMAIL
  PHONE
  DEVICE_FINGERPRINT
  BEHAVIORAL_MATCH
  MULTI_FACTOR
}

ComputedAttribute

Wrapper for computed values with confidence scores.
type ComputedAttribute {
  value: String!
  confidence: Float!               # 0.0 to 1.0 based on observation count
}

type ComputedListAttribute {
  values: [String!]!
  confidence: Float!
}

GuestBehavior

Behavioral patterns derived from interactions. All fields nullable with embedded confidence.
type GuestBehavior {
  browsingStyle: ComputedAttribute
  customizationRate: ComputedAttribute
  decisionSpeed: ComputedAttribute
  pricePreference: ComputedAttribute
  visitPatterns: VisitPatterns
  engagementScore: ComputedAttribute
}

type VisitPatterns {
  preferredDays: [DayOfWeek!]
  preferredTimes: [MealPeriod!]
  avgDwellTime: Int
  confidence: Float!
}

enum BrowsingStyle {
  EXPLORER             # Browses many items, tries new things
  LOYALIST             # Orders same items repeatedly
  RESEARCHER           # Reads details, compares options
  IMPULSE              # Quick decisions, minimal browsing
}

enum DecisionSpeed {
  QUICK                # <30 seconds to order
  MODERATE             # 30 seconds - 2 minutes
  DELIBERATE           # >2 minutes, reviews options
}

enum PricePreference {
  BUDGET               # Prefers lower-priced items
  VALUE_CONSCIOUS      # Balances price and quality
  PREMIUM              # Willing to pay more for quality
  INDIFFERENT          # Price not a factor
}

enum DayOfWeek {
  MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

enum MealPeriod {
  BREAKFAST            # 6am - 10am
  LUNCH                # 11am - 2pm
  AFTERNOON            # 2pm - 5pm
  DINNER               # 5pm - 9pm
  LATE_NIGHT           # 9pm - 12am
}

GuestDemographics

Inferred demographic profile. All fields nullable with embedded confidence.
type GuestDemographics {
  ageRange: ComputedAttribute
  householdType: ComputedAttribute
  dietaryLifestyle: ComputedAttribute
  healthFocus: ComputedListAttribute
  householdIncome: ComputedAttribute
}

enum HouseholdType {
  STUDENT
  YOUNG_PROFESSIONAL
  FAMILY_WITH_KIDS
  EMPTY_NESTER
  SENIOR
}

enum DietaryLifestyle {
  OMNIVORE
  FLEXITARIAN
  VEGETARIAN
  VEGAN
  HEALTH_CONSCIOUS
  PERFORMANCE_FOCUSED
  ALLERGY_RESTRICTED
}

enum HouseholdIncome {
  LOW                  # Bottom 25% by AOV
  MODERATE             # 25-75% by AOV
  HIGH                 # Top 25% by AOV
  VIP                  # Top 5% by lifetime value
}

OrderHistory

Complete order history. No confidence—factual data from actual orders.
type OrderHistory {
  totalOrders: Int!
  avgOrderValue: Float!
  lastOrderDate: DateTime
  frequentItems: [FrequentItem!]!
  preferredModifiers: [String!]!
  avgItemsPerOrder: Float!
}

type FrequentItem {
  dishId: String!
  dishName: String!
  orderCount: Int!
  lastOrdered: DateTime!
}

GuestSegments

type GuestSegments {
  primary: [SegmentMembership!]!
  compound: [SegmentMembership!]!
}

type SegmentMembership {
  segment: String!
  confidence: Float!
  basis: SegmentBasis!
}

enum SegmentBasis {
  EXPLICIT             # Guest explicitly set this preference
  OBSERVED             # Derived from consistent behavior
  INFERRED             # Predicted from limited data
}

TargetedDish

AI-powered dish recommendations.
type TargetedDish {
  dishId: String!
  dishName: String!
  reason: String!
  confidence: Float!             # 0.0 to 1.0
  targetingType: TargetingType!
}

enum TargetingType {
  PREFERENCE_MATCH       # Matches dietary/nutritional preferences
  REORDER                # Previously ordered, likely to order again
  NEW_ITEM_DISCOVERY     # New menu item matching their profile
  UPSELL                 # Add-on they typically purchase
  CROSS_SELL             # Complementary item based on order patterns
}

LoyaltyTag

Data from third-party loyalty systems. No confidence—authoritative from source.
type LoyaltyTag {
  source: LoyaltySource!
  programId: String!
  tier: String
  points: Int
  tags: [String!]!
  confidence: Float!                # 0.0 to 1.0 - match confidence from source
  lastSyncedAt: DateTime!
}

enum LoyaltySource {
  CUSTOM                         # Direct API integration
}

Touchpoints

Cross-platform interaction metrics. No confidence—factual counts.
type Touchpoints {
  totalSessions: Int!
  platforms: [PlatformMetric!]!
  firstSeen: DateTime!
  lastSeen: DateTime!
}

type PlatformMetric {
  platform: Platform!
  sessionCount: Int!
  lastSeen: DateTime!
}

Recommendation

type Recommendation {
  type: RecommendationType!
  dishId: String!
  reason: String!
  confidence: Float!
}

enum RecommendationType {
  HIGHLIGHT              # Feature prominently based on preferences
  UPSELL                 # Suggest add-on based on past behavior
  REORDER                # Previous favorite
  NEW_MATCH              # New menu item matching their profile
}

Scalar Types

DateTime

ISO 8601 date-time string.
"2026-01-19T11:00:00.000Z"

ID

Unique identifier (string format).
"dish_001"
"nutr_abc123"