OpenMenu Search API

Find restaurants, menu items, and sample menus by location and term.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

openmenu-search-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: OpenMenu Analytics Search API
  version: 2.2.0
  description: The OpenMenu REST API returns structured restaurant and menu data built on the OpenMenu Format. Standard endpoints cover search, restaurant, location, deals, and ingredients, returning menu items with prices, locations, and dietary attributes. An Enhanced enterprise tier adds DishDNA machine-learning analysis, trends, heatmaps, and gap analysis. Authentication uses an API key passed as the `key` query parameter, and a sandbox mode (`s=sample` or `id=sample`) returns fixed sample JSON without consuming credits.
  contact:
    name: Kin Lane
    email: kin@apievangelist.com
  termsOfService: https://www.openmenu.com/tos-api.php
servers:
- url: https://www.openmenu.com/api/v2
  description: OpenMenu API v2 production server
security:
- ApiKeyAuth: []
tags:
- name: Search
  description: Find restaurants, menu items, and sample menus by location and term.
paths:
  /search.php:
    get:
      operationId: search
      summary: Search Restaurants And Menu Items
      description: Find restaurants, menu items, and sample menus by location and search term. At least one of `postal_code` or `city` is required, along with `country`. Use `s=sample` for sandbox data.
      tags:
      - Search
      parameters:
      - $ref: '#/components/parameters/Key'
      - name: s
        in: query
        required: true
        description: Search term for a restaurant or menu item. Use `sample` for sandbox data.
        schema:
          type: string
      - name: offset
        in: query
        required: false
        description: Page index for paginated results (0-based). Maximum page index is 10.
        schema:
          type: integer
          minimum: 0
          maximum: 10
          default: 0
      - name: r
        in: query
        required: false
        description: Limit results to restaurants only.
        schema:
          type: integer
          enum:
          - 0
          - 1
      - name: mi
        in: query
        required: false
        description: Limit results to menu items only.
        schema:
          type: integer
          enum:
          - 0
          - 1
      - $ref: '#/components/parameters/PostalCode'
      - $ref: '#/components/parameters/City'
      - $ref: '#/components/parameters/State'
      - $ref: '#/components/parameters/Country'
      responses:
        '200':
          description: Search results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponse'
        '400':
          $ref: '#/components/responses/InvalidKey'
        '402':
          $ref: '#/components/responses/BillingInactive'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    Country:
      name: country
      in: query
      required: true
      description: Country for the search area, ISO 3166-1 alpha-2 (e.g. US).
      schema:
        type: string
    Key:
      name: key
      in: query
      required: false
      description: API key issued from your OpenMenu account.
      schema:
        type: string
    State:
      name: state
      in: query
      required: false
      description: Optional two-letter state or province code to narrow results.
      schema:
        type: string
    PostalCode:
      name: postal_code
      in: query
      required: false
      description: Limit results to a postal or ZIP code. Required if `city` is not provided.
      schema:
        type: string
    City:
      name: city
      in: query
      required: false
      description: Limit results to a city. Required if `postal_code` is not provided.
      schema:
        type: string
  schemas:
    SearchResponse:
      type: object
      properties:
        api:
          $ref: '#/components/schemas/ApiEnvelope'
        result:
          type: object
          properties:
            restaurants:
              type: array
              items:
                $ref: '#/components/schemas/RestaurantSummary'
            items:
              type: array
              items:
                $ref: '#/components/schemas/MenuItem'
            menus:
              type: array
              items:
                $ref: '#/components/schemas/Menu'
    Menu:
      type: object
      description: A single menu within a restaurant, per the OpenMenu Format.
      properties:
        menu_name:
          type: string
        menu_description:
          type: string
        menu_note:
          type: string
        currency_symbol:
          type: string
        language:
          type: string
        menu_duration_name:
          type: string
          enum:
          - breakfast
          - brunch
          - lunch
          - breakfast-lunch
          - dinner
          - lunch-dinner
          - late-night
          - all
        menu_duration_time_start:
          type: string
          description: Start time in hh:mm (ISO 8601, 24-hour).
        menu_duration_time_end:
          type: string
          description: End time in hh:mm (ISO 8601, 24-hour).
        menu_groups:
          type: array
          items:
            $ref: '#/components/schemas/MenuGroup'
    RestaurantSummary:
      type: object
      description: Compact restaurant record returned in search and location results.
      properties:
        id:
          type: string
        restaurant_name:
          type: string
        brief_description:
          type: string
        address_1:
          type: string
        address_2:
          type: string
        city_town:
          type: string
        state_province:
          type: string
        postal_code:
          type: string
        country:
          type: string
        longitude:
          type: number
        latitude:
          type: number
        cuisine_type_primary:
          type: string
        website_url:
          type: string
        mobile:
          type: string
        fDateUpdated:
          type: string
        social:
          type: object
          properties:
            facebook:
              type: string
            twitter:
              type: string
        totals:
          type: object
          properties:
            deals:
              type: integer
    ApiEnvelope:
      type: object
      description: Standard `response.api` envelope returned with every call.
      properties:
        status:
          type: integer
          description: HTTP-style status code (e.g. 200).
        api_version:
          type: string
          description: API version, e.g. "2.2".
        format:
          type: string
          description: Response format, e.g. "json".
        api_key:
          type: boolean
          description: Whether a valid API key accompanied the request.
    MenuItem:
      type: object
      description: A single menu item with prices, dietary flags, and allergens.
      properties:
        menu_item_name:
          type: string
        menu_item_description:
          type: string
        menu_item_price:
          type: string
        menu_item_calories:
          type: integer
        menu_item_heat_index:
          type: integer
        menu_item_allergy_information:
          type: object
          properties:
            menu_item_allergy_information_allergens:
              type: array
              items:
                type: string
                enum:
                - Egg
                - Fish
                - Dairy
                - Peanut
                - Shellfish
                - Soy
                - Tree Nut
                - Wheat
                - Gluten
        special:
          type: boolean
        vegetarian:
          type: boolean
        vegan:
          type: boolean
        kosher:
          type: boolean
        halal:
          type: boolean
        gluten_free:
          type: boolean
        menu_item_options:
          type: array
          items:
            type: object
        menu_item_sizes:
          type: array
          items:
            type: object
        menu_item_images:
          type: array
          items:
            type: string
    MenuGroup:
      type: object
      properties:
        group_name:
          type: string
        group_note:
          type: string
        group_description:
          type: string
        menu_group_options:
          type: array
          items:
            type: object
        menu_items:
          type: array
          items:
            $ref: '#/components/schemas/MenuItem'
  responses:
    RateLimited:
      description: Daily or monthly call credit limit exceeded. Response includes an `upgrade_url`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiEnvelope'
    BillingInactive:
      description: Key is valid structurally but API billing is inactive or expired.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiEnvelope'
    InvalidKey:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiEnvelope'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: query
      name: key
      description: API key issued from your OpenMenu account, passed as the `key` query parameter on every request. There is no Bearer token or custom header.