Skip to main content

Authentication

All EveryBite API requests require authentication using a Menu Key. This page explains how keys work and what access levels are available. A Menu Key identifies which restaurant brand’s menu data your application can access. Think of it as your API credential scoped to specific menu data.
# Include your Menu Key in the Authorization header
Authorization: Bearer hg_live_abc123def456...

Key Types and Access Levels

Menu Keys are issued at different levels of the restaurant hierarchy, depending on your relationship with the brand.
For: Single-location restaurants or franchiseesAccess: One restaurant location and its menus
Restaurant Key
└── Single Location
    └── All menus at that location

Getting Your Key

  1. Sign up at developer.everybite.com
  2. Request access to a specific brand’s menu data
  3. Receive approval from the brand administrator
  4. Get your Menu Key in your developer dashboard
Keep your Menu Key secure. Do not expose it in client-side code or public repositories. Use environment variables and server-side requests.

Environments

Each Menu Key has separate credentials for sandbox and production:
EnvironmentBase URLPurpose
Sandboxhttps://api.everybite-stage.com/graphqlTesting and development
Productionhttps://api.everybite.com/graphqlLive data
Sandbox keys have the prefix _sandbox and access test data that mirrors production structure.

Diner Preferences (Per-Request)

In addition to your Menu Key, you can pass Diner Preferences with each request to personalize results:
query {
  dishes(
    menuKey: "your_menu_key",
    dinerPreferences: {
      diets: [Vegan, GlutenFree],
      excludeAllergens: [Peanut, Dairy],
      calorieRange: { min: 200, max: 600 }
    }
  ) {
    results {
      dish { name }
      matchStatus  # Calculated based on dinerPreferences
    }
  }
}
Diner Preferences are not stored - they’re applied per-request. For persistent preferences, use EveryBite Passport.

Passport Tokens

If integrating with EveryBite Passport, you’ll also work with Passport Tokens for authenticated diners:
query {
  dishes(
    menuKey: "your_menu_key",
    passportToken: "diner_passport_token"  # Loads their saved preferences
  ) {
    results {
      dish { name }
      matchStatus  # Based on their Passport preferences
    }
  }
}
See Passport Authentication for details.

Rate Limits

Key TypeRequests/minuteRequests/day
Restaurant6010,000
Chain300100,000
Brand1,000Unlimited
Rate limit headers are included in every response:
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 297
X-RateLimit-Reset: 1703001600

Error Codes

CodeMeaningSolution
INVALID_MENU_KEYKey is malformed or expiredCheck your key, request a new one if expired
UNAUTHORIZED_BRANDKey doesn’t have access to requested brandRequest access to the brand
RATE_LIMITEDToo many requestsSlow down, implement backoff
KEY_REVOKEDKey has been revokedContact support