SinglePlatform Publisher Integration

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/partner-agreement/

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/partner-agreement/

SinglePlatform Contact Information

Business Contact
  • Contact Name: Kenny Herman
  • Email: kherman@singleplatform.com
  • Phone: (310) 906-0399 (Note: Operating on EST in NYC)
Technical Contact
  • Contact Name: Matt Doumar
  • Email: mdoumar@singleplatform.com
  • Phone: (646) 503-2174 (Note: Operating on EST in NYC)

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/integration-summary/

Partner Agreement Considerations

SinglePlatform's agreement with our partners requires all publishers to update SinglePlatform's data every 24 hours. To do this, our partners make use of our updatedSince parameter in our Search API.

By passing in, as a search parameter, the updatedSince date tag of the previous day, you will be returned a list of all SinglePlatform IDs that have been added or updated in that time period.

  • If the SinglePlatform ID returned to you has already been mapped on your side, then we require that you re-ingest and update the existing data for that location and its menu.
  • If the SinglePlatform ID returned to you has not been mapped on your side, then we require that you map it to an existing location in your database and ingest the location/menu data accordingly.
  • If the SinglePlatform ID returned to you has not been mapped on your side, and you are unable to find a match in your database, then we require that you add the location to your database and ingest the location/menu data accordingly. 

Matt Doumar (mdoumar@singleplatform.com), our product lead, will be available to work with our partners' dev teams to ensure the process of matching / updating / adding locations is as straightforward as possible and in compliance with SinglePlatform's partner agreement.

Integration Summary

Following are the available methods of integration with SinglePlatform web services.

Accessing Data

There is one way to access our data:

  1. REST API: A publisher REST API exposes location and other information

Menus Integration

Integration of our full-site menus is done in one of the following ways:

  1. JavaScript API: A JavaScript API that inserts menus directly into a div element on the location page
    • This is the current standard way of doing website mashups / integrations. The user stays on the publisher site using this method of integration.
  2. REST API: Publisher can display real-time menu content by displaying SinglePlatform's JSON data directly from the side of the publisher.
    • To do this, every service call to retrieve a data point will need to come through the REST API. The publisher will make a server side request for JSON from SinglePlatform, which can be parsed/formatted on the publisher's side and served to the client from the publisher.
    • This works with REST API data integration method
    • This method would miss functionality we add around menus, such as item likes, item out-of-date, chef's choice items, daily/weekly specials, and our "Suggest a Change to this Menu" feedback loop.

API End Points

The base URI to use for the REST API is:

The base URI to use for the JavaScript API is:

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/api-requirements/

General API Requirements

Applications that use the SinglePlatform APIs must abide by all existing Terms of Service. Most importantly, you must correctly identify your requests.

Applications must always include a valid and accurate HTTP referrer header in their requests.

Most requests should contain a valid API Key.

Some requests require authentication using a Client ID and a Signing Key. See API Authentication.

API Key

The API Key is used in many requests made to the SinglePlatform APIs. Though the API Key is not required for requests that accept it, the API Key should be provided. This allows us to contact you in the event of issues with your application.

An API Key is provided upon request.

Example Usage of the API Key

Replace YOUR_API_KEY_HERE with the SinglePlatform API Key provided to you.

In a URL, your key would be used like this:

http://menus.singleplatform.co/locations/haru-7/menu?apiKey=YOUR_API_KEY_HERE

In the JavaScript API, your key would be used like this:

<script type="text/javascript" src="http://menus.singleplatform.co/jsload?load=menus.2&apiKey=YOUR_API_KEY_HERE"></script>
<script>
    var menuApi = new MenusApi("YOUR_API_KEY_HERE");
    menuApi.loadMenusForLocation("haru-7", "menusContainer");
</script>

API Authentication

Requests to some portions of the API require using a cryptographic Signing Key we provide to you for that purpose. The signing process combines a URL and the Signing Key together using an encryption algorithm, creating a unique signature. This signature allows our services to verify that any sites generating requests using your API Key are authorized to do so.

URL signing serves both to authenticate you to our web services as well as track your usage.

The URL Signing Process

Signing a URL involves generating a signature using a secret Signing Key shared between you and SinglePlatform. This signature is then attached to any HTTP (or HTTPS) requests. You generate this signature for a URL using the signing key, which creates a hash that is unique to that URL and the signing key. If the URL differs in any way from that used to generate the signature, the service will reject the request as invalid.

Attempting to access a web service with an invalid signature will result in an HTTP 403 (Forbidden) error.

Acquiring a Signing Key

Your cryptographic URL-signing key will be issued with your Client ID and is a "secret shared key" between you and SinglePlatform. Client IDs are issued to all SinglePlatform API customers. This Signing Key is yours alone and unique to your Client ID. For that reason, please keep your signing key secure. Though used to generate the signature, this key should not be passed within any requests, stored on any websites, or posted to any public forum. Anyone obtaining this Signing Key "in the clear" could spoof requests using your identity.

Note: The Signing Key and Client ID are not the same as the API Key.

Generating Valid Signatures

To help in debugging, make sure your URLs are valid before you sign them! See Building Valid URLs for more information.

These are the steps you should use to sign a valid URL:

  1. Construct your URL. Make sure to include the clientparameter. Note, any non-standard characters need to be URL-encoded.

    http://api.singleplatform.co/locations/haru-7?client=YOUR_CLIENT_ID
    

    All SinglePlatform services require UTF-8   character encoding, which implicitly includes ASCII. Make sure your applications construct URLs using UTF-8   and properly URL-encoded characters, particularly if your application works with other character sets.

  2. Strip off the domain portion of the request, leaving only the path and the query:

    /locations/haru-7?client=YOUR_CLIENT_ID
    
  3. Retrieve your private key, which is encoded in a modified Base64 for URLs, and sign the URL above using the HMAC-SHA1 algorithm. You may need to decode the Signing Key into its original binary format. In many cryptographic libraries, the resulting signature will be in binary format.
  4. Encode the resulting binary signature using the modified Base64 for URLs to convert this signature into something that can be passed within a URL.
  5. Attach this signature to the URL with a sigparameter:

    http://api.singleplatform.co/locations/haru-7?client=YOUR_CLIENT_ID&sig=BASE64_SIGNATURE
    

Note

Modified Base64 for URLs replaces the '+' and '/' characters of standard Base64 with '-' and '_' respectively, so that these Base64 signatures no longer need to be URL-encoded.

Building Valid URLs

You may think that a "valid" URL is self-evident, but that's not quite the case. A URL entered within an address bar in a browser, for example, may contain special characters (e.g. "éîñå"); the browser needs to internally translate those characters into a different encoding before transmission. By the same token, any code that generates or accepts UTF-8   input might treat URLs with UTF-8   characters as "valid", but would also need to translate those characters before sending them out to a web server. This process is called URL-encoding.

We need to translate special characters because all URLs need to conform to the syntax specified by the W3 Uniform Resource Identifier specification. In effect, this means that URLs must contain only a special subset of ASCII characters: the familiar alphanumeric symbols, and some reserved characters for use as control characters within URLs. The table below summarizes these characters:

Set

Characters

URL Usage

Alphanumeric

a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9

Text strings, scheme usage (ex: http), port (80), etc.

Unreserved

- _ . ~

Text strings

Reserved

! * ' ( ) ; : @ & = + $ , / ? % # [DOCS: ]

Control characters and/or text strings

When building a valid URL, you must ensure that it contains only those characters shown above. Two issues generally arise when conforming a URL to use this set of characters, one of omission and one of substitution:

  • Characters that you wish to handle exist outside of the above set. For example, characters in foreign languages such as éîñå need to be encoded using the above characters. By popular convention, spaces (which are not allowed within URLs) are often represented using the plus '+' character as well.
  • Characters exist within the above set as reserved characters, but need to be used literally. For example, ? is used within URLs to indicate the beginning of the query string; if you wish to use the string "? is a bulldog," you'd need to encode the '?' character.

All characters to be URL-encoded are encoded using a '%' character and a two-character hex value corresponding to their UTF-8   character. For example, éîñå in UTF-8   would be URL-encoded as %8E%94%96%8C. The string ? is a bulldog would be URL-encoded as %3F+is+a+bulldog.

Converting a URL that you receive from user input is sometimes tricky. For example, a user may enter an address as "17th st. & 8th ave." Generally, you should construct your URL from its parts, treating any user input as literal characters.

Additionally, URLs are limited to 2048 characters for all web services. For most services, this character limit will seldom be approached. However, certain services have several parameters that may result in long URLs.

Sample Libraries

Sample libraries are available for download if you need assistance generating valid URLs:

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/rest-api/

REST API

General API Information

Content Types

The SinglePlatform REST API is a well-behaving API that returns results according to the requested content type. Use the Accept header in a request to indicate you want the result in a specific format.

Default Content Type

Except where noted, the default content type of all responses in the API is text/html.

Accepted Content Types

The content types currently understood by much of the API includes:

  • text/html
  • application/json

If a URI responds to a differing set of content types, that URI's definition includes the list of content types to which it responds.

Request Header

What is always accepted in the headers:

  • Referer
  • User-Agent
  • Accept
  • Content-Type

For specific URIs, other required or optional headers may be defined.

Response Header

What is commonly returned in the response headers:

  • Content-Type

For specific URI responses, other response headers may be defined.

Default Response

Unless otherwise noted, the default response from an action is a text/html document with the following fields:

  • code: Matches the HTTP response code.
  • status: The Message associated with the HTTP response code.
  • ok: Either "true" or "false", if the HTTP response code is in the 2xx family.

To receive a document in another format, that format must be specified in the Content-Type request header.

API Key Use

Unless otherwise noted, all API requests for HTML data should be accompanied by your API Key.

For details about what is the API Key and how you can obtain it, see: API Key.

Authentication Requirements

Unless otherwise noted, all API requests for JSON data require the request to be authenticated using your Client ID and Signing Key.

For details about how to acquire and use them, see API Authentication.

URIs

URI: /locations/search

The search URI should be used to find any locations available for your use.

GET

Request

Headers:

  • Accept: takes one of: application/json

Parameters:

  • q: The query string. A free-form query, it searches in the following ways (NOTE: blank queries return nothing):
    • by phone number in one of these forms: 10 sequential digits; with dash or period separators (ex: XXX-XXX-XXXX)
    • by zip code in one of these forms: 5 digit zip, 9 digit zip with dash (ex. 10001-4356)
    • by name of location
  • page: The page number. A zero-based value. The default value is 0 for the first page.
  • count: The number of results per page. The default value is 20, and the maximum value is 1000.
  • updatedSince: Filter the results to list only those locations updated since the specified date and time.
    • Format (date only): YYYY-MM-DD
    • Example:
      • ?updatedSince=2013-01-05
    • Format (date & time): YYYY-MM-DDTHH%3AMM%3ASS
    • Example:
      • ?updatedSince=2013-01-05T09%3A10%3A00

URI Examples:

The following two example URIs are equivalent and return the first 20 of the available locations as the 0th page of locations.

/locations/search
/locations/search?q=&page=0&count=20

An example query URL that returns the third page of results for all locations with Haru in the name:

/locations/search?q=Haru&page=3&count=100

The following example returns the first 20 of the locations updated since January 18, 2013 at 2:03 pm as the 0th page of locations.

/locations/search?updatedSince=2013-01-18T14%3A03%3A00
Response

The JSON response contains the following information:

  • A map of:
    • query: The original query line sent to the search engine
    • oktrue if the search was a success. false if the search was not a success. If the search was a success but no results were found, this value is true.
    • page: Which page these results are on, should match the original query (or be 0 if not defined in the original query)
    • count: Number of results per page, should match the original query (or be 20 if not defined in the original query)
    • total: The full number of results that the search have matched; can be used to calculate total number of pages
    • time: The date/time when the query was performed in Eastern Standard Time (EST).
    • results: A list of maps, each is a location with the keys as defined in Location Field Descriptions.

URI: /locations/LOCATION

In the URI, LOCATION should be replaced by the ID of the location. For example, the ID for Haru might be haru-7 and the URI would be /locations/haru-7

GET

Request

Headers:

  • Accept: takes one of: application/json
Response

Returns the set of information for the location as defined in Location Field Descriptions.

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/rest-api/

URI: /locations/LOCATION/menu

GET

Request

Headers:

  • Accept: takes: application/json
Response

application/json:
For an application/json request, you get a JSON document that contains one of the following:

  1. A map containing:
    • location: A map containing the location information as defined in Location Field Descriptions
    • locationToMenus: A map of location-to-menus as defined in Location-to-Menu Map Field Descriptions
    • menus: A list of maps where each map contains a menu as defined in Menu Field Descriptions

URI: /locations/LOCATION/shortmenu

GET

Request

Headers:

  • Accept: takes: application/json
Response

application/json:
For an application/json request, you get a JSON document that contains one of the following:

  1. A map containing:
    • type: The type of short menu.
    • numItems: The number of items in the short menu. Typically between 3 and 5, inclusive.
    • location: A map containing the location information as defined in Location Field Descriptions
    • shortmenu: A list of maps where each map contains a menu as defined in Short Menu Field Descriptions

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/javascript-api/

JavaScript APIs

JavaScript API Requirements

Browser Compatibility

The SinglePlatform Menus API currently supports Firefox 1.5+, IE7+, Safari and Chrome.

Element IDs and Class Names

All element IDs and class names used in the menus begin with the string:

sp_

Using the Menus JavaScript API

The following sections demonstrate how to incorporate the SinglePlatform Menus API into your web page or application.

Load the Menus JavaScript API

Include the following scripts in the webpage to contain the menu. Where it says YOUR_API_KEY_HERE, enter your SinglePlatform API Key.

<script type="text/javascript" src="http://menus.singleplatform.co/jsload?load=menus.2&apiKey=YOUR_API_KEY_HERE"></script>

Get the Menus

Now we use the MenusApi class to load the menus for a location and place them in the target element on the page. The following lines of JavaScript show how to load the menus.

var menuApi = new MenusApi("YOUR_API_KEY_HERE");
menuApi.loadMenusForLocation("LOCATION_ID", "ID_OF_TARGET_ELEMENT");

When writing your code, make the following replacements:

  • For YOUR_API_KEY_HERE, enter your SinglePlatform API Key
  • For ID_OF_TARGET_ELEMENT, put the ID of the target HTML element into which the menu should be placed
  • For LOCATION_ID, put the alpha-numeric ID of the location for which to load the menus (note: this is not the externalId)

Get the Mobile-Optimized Menus

Getting the mobile-optimized menus is similar to getting the full-website menus. The difference is the name of the function that loads the menus: loadMobileMenusForLocation(). The following lines of JavaScript show how to load the mobile menus.

var menuApi = new MenusApi("YOUR_API_KEY_HERE");
menuApi.loadMobileMenusForLocation("LOCATION_ID", "ID_OF_TARGET_ELEMENT");

When writing your code, make the replacements just as you would for the full-website menus.

Get the Short Menu ("Most Popular" / "Menu Preview")

Getting the shortened menu is similar to getting the full-website menus. The difference is the name of the function that loads the menus: loadShortMenuForLocation(). The following lines of JavaScript show how to load the short menu.

var menuApi = new MenusApi("YOUR_API_KEY_HERE");
menuApi.loadShortMenuForLocation("LOCATION_ID", "ID_OF_TARGET_ELEMENT", "FULL_MENU_URL_OR_CALLBACK");

When writing your code, make the replacements just as you would for the full-website menus. The third parameter, FULL_MENU_URL_OR_CALLBACK, is optional and determines what happens when a user clicks the full menu link. Details:

  • The possible values that can be passed in are:
    • A string containing a URL that will open in the window
    • A function that will be called
  • If nothing is passed in, the full menu on singlepage.com is opened in a popup window.

Get the Mobile-Optimized Short Menu ("Most Popular" / "Menu Preview")

Getting the mobile-optimized short menu is similar to getting the website short menu. The difference is the name of the function that loads the menus:loadMobileShortMenuForLocation(). The following lines of JavaScript show how to load the short menu.

var menuApi = new MenusApi("YOUR_API_KEY_HERE");
menuApi.loadMobileShortMenuForLocation("LOCATION_ID", "ID_OF_TARGET_ELEMENT", "FULL_MENU_URL_OR_CALLBACK");

When writing your code, make the replacements just as you would for the website short menu. The third parameter, FULL_MENU_URL_OR_CALLBACK, is optional and determines what happens when a user clicks the full menu link. Details:

  • The possible values that can be passed in are:
    • A string containing a URL that will open in the window
    • A function that will be called
  • If nothing is passed in, the full menu on singlepage.com is opened in a popup window.

Menu Style and Behavior Customization

Before loading the menu, some style and behavior customization can be made by calling methods on the instance of the MenusApi class in the JavaScript code.

The custimizations are applied by calling functions on the MenusApi instance created in the javascript integration. The following code shows a couple examples of how to set some styles:

var menuApi = new MenusApi("YOUR_API_KEY_HERE");

menuApi.setPrimaryFontFamily("Calibri");
menuApi.setPrimaryColor("#ccc").setSecondaryColor("#aaa");

menuApi.loadMenusForLocation("LOCATION_ID", "ID_OF_TARGET_ELEMENT");

Notice that the calls can be chained, as shown by the setting of the primary and secondary colors.

This method of customizing styles also applies for mobile menus.

Menu Style and Behavior Functions

Below is the list of available functions. First, a couple of general notes on the functions.

The function arguments all accept a particular type of CSS setting. The accepted values are:

  • for color: a valid CSS color needs to be passed in
  • for fontFamily: a valid string of font families needs to be passed in
  • for size: a valid CSS size string needs to be passed in
setPrimaryBackgroundColor( color )

setPrimaryBackgroundColor() sets the primary background color in the menu. It applies to:

  • Menu title background
  • Menu border
  • Item separator
  • Short Menu: menu title background
  • Short Menu: menu border
  • Short Menu: item separator

The default color is:

#D9D9D9
setSecondaryBackgroundColor( color )

setSecondaryBackgroundColor() sets the secondary background color. It applies to:

  • The space between the menu and the disclaimer
  • The background behind the 'Menu Provided by SinglePlatform' image
  • Short Menu: the background behind the 'Provided by SP' image

The default color is:

white
setMenuDescBackgroundColor( color )

setMenuDescBackgroundColor() sets the background color of:

  • Menu description background

The default color is the primary background color.

setSectionTitleBackgroundColor( color )

setSectionTitleBackgroundColor() sets the background color of:

  • Section titles

The default section title background color is:

#E3E3E3
setSectionDescBackgroundColor( color )

setSectionDescBackgroundColor() sets the background color of:

  • Section descriptions

The default section description background color is the same as the section title background color.

setItemBackgroundColor( color )

setItemBackgroundColor() sets the background color of:

  • Items
  • Short Menu: items

The default color is the secondary background color.

setFeedbackBackgroundColor( color )

setFeedbackBackgroundColor() sets the background color of:

  • Feedback (Edit Menu) accordion background, excluding the form fields, submit button and cancel button.

The default color is the color of the section title background with 20 (hex 0x14) added to each of the RGB channels.

setFeedbackFieldBackgroundColor( color )

setFeedbackFieldBackgroundColor() sets the background color of:

  • The fields in the feedback (Edit Menu) accordion form

The default color is the color of the item background.

setFeedbackSubmitBackgroundColor( color )

setFeedbackSubmitBackgroundColor() sets the background color of:

  • The submit button of the feedback (Edit Menu) accordion form

The default color is the color of the item background.

setFeedbackCancelBackgroundColor( color )

setFeedbackCancelBackgroundColor() sets the background color of:

  • The cancel button of the feedback (Edit Menu) accordion form

The default color is the color of the feedback background.

setBaseFontSize( size )

setBaseFontSize() sets the base font size of the text in the menu and short menu. The size of all text in the menu and short menu is then set relative to the base font size.

The default value is set to:

12px
setPrimaryFontFamily( fontFamily )

setPrimaryFontFamily() sets the font family for:

  • Menu title
  • Menu footnote
  • Menu disclaimer
  • Short Menu: menu title
  • Short Menu: "view full" link

The default value (graceful degradation) is:

Calibri, Helvetica, Verdana, Sans-Serif
setPrimaryFontColor( color )

setPrimaryFontColor() sets the font color for:

  • Menu title
  • Menu footnote
  • Menu disclaimer
  • Short Menu: menu title
  • Short Menu: "view full" link

The default value is:

black
setMenuDescFontFamily( fontFamily )

setMenuDescFontFamily() sets the font family for:

  • Menu description background

The default value is the primary font family.

setMenuDescFontColor( color )

setMenuDescFontColor() sets the font color for:

  • Menu description background

The default value is the primary font color.

setSectionTitleFontFamily( fontFamily )

setSectionTitleFontFamily() sets the font family for:

  • Section titles

The default value is the primary font family.

setSectionTitleFontColor( color )

setSectionTitleFontColor() sets the font color for:

  • Section titles

The default value is the primary font color.

setSectionDescFontFamily( fontFamily )

setSectionDescFontFamily() sets the font family for:

  • Section descriptions

The default value is the primary font family.

setSectionDescFontColor( color )

setSectionDescFontColor() sets the font color for:

  • Section descriptions

The default value is:

#777
setItemTitleFontFamily( fontFamily )

setItemTitleFontFamily() sets the font family for:

  • Item titles
  • Short Menu: item titles

The default value is the primary font family.

setItemTitleFontColor( color )

setItemTitleFontColor() sets the font color for:

  • Item titles
  • Short Menu: item titles

The default value is the primary font color.

setItemPriceFontFamily( fontFamily )

setItemPriceFontFamily() sets the font family for:

  • Item prices
  • Item price labels
  • Short Menu: item prices

The default value is the item title font family.

setItemPriceFontColor( color )

setItemPriceFontColor() sets the font color for:

  • Item prices
  • Item price labels
  • Short Menu: item prices

The default value is the item title font color.

setItemDescFontFamily( fontFamily )

setItemDescFontFamily() sets the font family for:

  • Item descriptions

The default value is the primary font family.

setItemDescFontColor( color )

setItemDescFontColor() sets the font color for:

  • Item descriptions

The default value is:

#777
setFeedbackFontFamily( fontFamily )

setFeedbackFontFamily() sets the font family for:

  • Feedback (Edit Menu) accordion text, excluding the form fields, submit button and cancel button

The default value is the primary font family.

setFeedbackFontColor( color )

setFeedbackFontColor() sets the font color for:

  • Feedback (Edit Menu) accordion text, excluding the form fields, submit button and cancel button

The default value is:

#777
setFeedbackFieldFontFamily( fontFamily )

setFeedbackFieldFontFamily() sets the font family for:

  • The fields in the feedback (Edit Menu) accordion form

The default value is the primary font family.

setFeedbackFieldFontColor( color )

setFeedbackFieldFontColor() sets the font color for:

  • The fields in the feedback (Edit Menu) accordion form

The default value is:

#777
setFeedbackSubmitFontFamily( fontFamily )

setFeedbackSubmitFontFamily() sets the font family for:

  • The submit button of the feedback (Edit Menu) accordion form

The default value is the primary font family.

setFeedbackSubmitFontColor( color )

setFeedbackSubmitFontColor() sets the font color for:

  • The submit button of the feedback (Edit Menu) accordion form

The default value is the value of the section title background color with 20 (hex 0x14) subtracted from each of the RGB channels.

setFeedbackCancelFontFamily( fontFamily )

setFeedbackCancelFontFamily() sets the font family for:

  • The cancel button of the feedback (Edit Menu) accordion form

The default value is the primary font family.

setFeedbackCancelFontColor( color )

setFeedbackCancelFontColor() sets the font color for:

  • The cancel button of the feedback (Edit Menu) accordion form

The default value is the value of the feedback font color.

Full Menu API Integration Example

A complete example might look like:

<html>
<head>
</head>
<body>
<p> Some text </p>

<div id="menusContainer"></div>

<p> Some other text </p>

<script type="text/javascript" src="http://menus.singleplatform.co/jsload?load=menus.2&apiKey=K4j13GNS317751SV13SHUUEX2sgg7D2bs"></script>
<script>
    var menuApi = new MenusApi("K4j13GNS317751SV13SHUUEX2sgg7D2bs");
    menuApi.setBaseFontSize("10pt");
    menuApi.setPrimaryFontFamily("Arial");
    menuApi.setPrimaryBackgroundColor("#eee");
    menuApi.setSecondaryBackgroundColor("#ccc");
    menuApi.setSectionTitleFontColor("blue");
    menuApi.loadMenusForLocation("haru-7", "menusContainer");
</script>

</body>
</html>

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/data-definitions/

Data Description

These are the descriptions of the fields included in the data we make available. All data is presented in JSON format.

List Format

In these data definitions, many of the models contain lists of elements. These lists follow a standard format:

  • each element in the list is a distinct element, usually either a sub-document or a string (i.e., the list is not a single string containing a comma-separated list of elements)
  • zero or more elements can be in the list

Location Field Descriptions

A location consists of a JSON document containing the following information:

  • id: the unique name of this location as used in the REST API and in the menu links. This is alpha-numeric.
  • factualId: the factual ID mapping for this location
  • outOfBusiness: indicates if the location is in business or out of business (i.e., closed). Valid values: true or false
    • NOTE: This field has been deprecated. While we still expose the field as to not disrupt existing publisher integrations, all values for outOfBusiness will be false.
  • businessType: the type of business for the location
  • publishedAt: the date the location was published
  • hasPhotos: indicates if a location has photos available via our Photos API (contact SinglePlatform to learn more about our photos service). Valid values: true or false
  • isOwnerVerified: indicates if a location is Owner Verified (i.e. SinglePlatform customer). Valid values: true or false

  • general
    • name: the name of the location
    • timeZone: time zone of the location
    • desc: general description of the location
    • website: location's existing website
  • location: address, directions, and other information about the physical location of the location
    • address1: physical street address of the location
    • address2: physical street address of the location
    • city: city of the location
    • region: region of the location (state, province, territory, etc.)
    • postcode: postal code of the location
    • country: the country in which the location resides
    • latitude: the latitude of the location
    • longitude: the longitude of the location
  • phones: a map of phone name to phone numbers. Each number is a 10 digit number with no dashes or spaces and no 1 at the beginning.
    • main: location's main number
    • fax: location's fax number
  • Hours: the daily opening and closing hours for a business

Sample Location Data

Here is a sample of what the location data would look like.

Single Location Entry
{
    "id": "island-prime",
    "factualId": "71f291e0-bef8-012e-5614-003048cad9da",
    "outOfBusiness": false,
    "publishedAt": "2012-03-09 11:07:15",
    "general": {
        "name": "Island Prime",
        "timeZone": "PST",
        "desc": "Resting on stilts atop San Diego Bay overlooking the city skyline and Coronado, there’s nowhere better than Island Prime & C Level to experience quintessential San Diego.  \r\n\r\nIsland Prime and C Level are two concepts under one roof!  Enjoy the casual side at C Level for lunch where it is first come, first serve in our dining room, lanai and outside terrace.  Island Prime is open for dinner and reservations are recommended but NOT required.",
        "website": "http://www.islandprime.com/"
    },
    "location": {
        "address1": "880 Harbor Island Dr",
        "address2": "",
        "city": "San Diego",
        "region": "CA",
        "country": "US",
        "postcode": "92101",
        "longitude": -117.19415,
        "latitude": 32.72494,
        "state": "CA",
        "zipCode": "92101"
    },
    "phones": {
        "main": "619-298-6802",
        "fax": null
    },
    "hours": {
        "mon": {
            "start": "11:30am",
            "end": "12:00am"
        },
        "tue": {
            "start": "11:30am",
            "end": "12:00am"
        },
        "wed": {
            "start": "11:30am",
            "end": "12:00am"
        },
        "thu": {
            "start": "11:30am",
            "end": "12:00am"
        },
        "fri": {
            "start": "11:30am",
            "end": "12:00am"
        },
        "sat": {
            "start": "11:30am",
            "end": "12:00am"
        },
        "sun": {
            "start": "11:30am",
            "end": "12:00am"
        },
        "holidaySchedule": ""
    },
    "hasPhotos": true,
    "businessType": "Restaurant",
    "isOwnerVerified": true
}
List of Locations
[
    {
        "id": "union-square-cafe",
        "factualId": "8f1687c6-2a90-4706-a99f-914c55be32a9",
        "outOfBusiness": false,
        "publishedAt": "2012-03-09 11:04:04",
        "general": {
            "name": "Union Square Cafe",
            "timeZone": "EST",
            "desc": "In October of 1985, Danny Meyer opened his first restaurant, Union Square Cafe. A new breed of American eatery, USC paired imaginative food and wine with caring hospitality, comfortable surroundings and exceptional value. Serving American cuisine with an Italian soul, USC was an immediate hit. From outstanding wines by the glass, dining at the bar and seasonal ingredients to an emerging downtown location and a mission to support our community, USC has changed the restaurant landscape in NYC and across the country. A critical success from the outset, USC has twice garnered The New York Times' three-star rating, and also earned Zagat Survey's #1 ranking as New York's Most Popular Restaurant for an unprecedented eight years.",
            "website": "http://unionsquarecafe.com/"
        },
        "location": {
            "address1": "21 E 16th St",
            "address2": "",
            "city": "New York",
            "region": "NY",
            "country": "US",
            "postcode": "10003",
            "longitude": -73.99169,
            "latitude": 40.73692,
            "state": "NY",
            "zipCode": "10003"
        },
        "phones": {
            "main": "212-243-4020",
            "fax": "212-627-2673"
        },
        "hours": {
            "mon": {
                "start": "12:00pm",
                "end": "10:00pm"
            },
            "tue": {
                "start": "12:00pm",
                "end": "10:00pm"
            },
            "wed": {
                "start": "12:00pm",
                "end": "10:00pm"
            },
            "thu": {
                "start": "12:00pm",
                "end": "10:00pm"
            },
            "fri": {
                "start": "12:00pm",
                "end": "11:00pm"
            },
            "sat": {
                "start": "12:00pm",
                "end": "11:00pm"
            },
            "sun": {
                "start": "12:00pm",
                "end": "10:00pm"
            },
            "holidaySchedule": ""
        },
        "hasPhotos": true,
        "businessType": "Restaurant",
        "isOwnerVerified": true
    },
    {
        "id": "banc-cafe",
        "factualId": "a2e3baf2-eae4-4017-98d1-1cf4ab02d145",
        "outOfBusiness": false,
        "publishedAt": "2012-03-09 10:35:56",
        "general": {
            "name": "Banc Cafe",
            "timeZone": "EST",
            "desc": "A neighborhood bar restaurant occupying the space of a 1920's bank. The decor is inspired by nineteenth century Parisian establishments. Terra Cotta textured walls, dimly lit chandelier's, copper table tops & curved banquette seating create a very unique and intimate setting. Executive Chef, John J. Loughran formerly of River Cafe in Brooklyn has created a menu that changes seasonally using the best of locally sourced ingredients. Chef John's philosophy, buy local and be creative. This is evident in every dish you taste at Banc Cafe. Our cocktails are created using fresh fruit & natural ingredients.We feel that tasty food & flavorful drinks provided with honest friendly service is a great way to win someone over. We hope that someone is you. Enjoy!",
            "website": "http://www.banccafe.com/"
        },
        "location": {
            "address1": "431 3rd Ave",
            "address2": "",
            "city": "New York",
            "region": "NY",
            "country": "US",
            "postcode": "10016",
            "longitude": -73.97973,
            "latitude": 40.74351,
            "state": "NY",
            "zipCode": "10016"
        },
        "phones": {
            "main": "212-252-0146",
            "fax": null
        },
        "hours": {
            "mon": {
                "start": "11:00am",
                "end": "04:00am"
            },
            "tue": {
                "start": "11:00am",
                "end": "04:00am"
            },
            "wed": {
                "start": "11:00am",
                "end": "04:00am"
            },
            "thu": {
                "start": "11:00am",
                "end": "04:00am"
            },
            "fri": {
                "start": "11:00am",
                "end": "04:00am"
            },
            "sat": {
                "start": "11:00am",
                "end": "04:00am"
            },
            "sun": {
                "start": "11:00am",
                "end": "04:00am"
            },
            "holidaySchedule": ""
        },
        "hasPhotos": true,
        "businessType": "Restaurant",
        "isOwnerVerified": true
    }
]

This documentation is obsolete. Please see updated documentation at http://docs.singleplatform.com/spv2/data-definitions--menus/

Location-to-Menus Map Field Descriptions

To know what menus belong to which locations, there is a mapping from a location to the menus for that location. The mapping consists of a list of individual menu maps. The fields in the menu maps are:

  • id: the numeric ID of the menu
  • name: the unique name of the menu among the menus for the location; used in the REST API
  • orderNum: the order number for this menu in the list of menus; a one (1) based number
  • state: the state of the menu. One of: enableddisabled

Sample Location-To-Menus Map Data

Here is a sample of what the location-to-menus map data would look like.

Single Menu Example
{
  "locationId" : "abc-kitchen",
  "locationToMenus" : [ {
    "id" : 2,
    "name" : "dinner",
    "orderNum" : 1,
    "state" : "enabled"
  } ]
}
Multiple Menu Example
{
  "locationId" : "les-halles",
  "locationToMenus" : [ {
    "id" : 3,
    "name" : "dinner",
    "orderNum" : 1,
    "state" : "enabled"
  },
  {
    "id" : 4,
    "name" : "revolutionary-brunch",
    "orderNum" : 2,
    "state" : "disabled"
  } ]
}

Menu Field Descriptions

A couple notes to help in understanding the field descriptions below:

  • There are multiple types of entries. Each entry type contains a slightly different set of information and is/should be rendered slightly differently.
  • The list of entries is ordered by the orderNum field. The ordering is important as it defines the order in which to render the entries in the menu and which items are in which sections.

A menu consists of a map of the following fields:

  • id: the unique, numeric id of this menu
  • name: a unique name for this menu among the menus for a given location; used in the REST API
  • title: the title of the menu. This is displayed to the user as the name of the menu
  • desc: the description of the menu
  • footnote: A note to display at the bottom of the menu in the menu border.
  • state: the state of menu. One of: enabled, disabled
  • disclaimer: the disclaimer text for the menu.
  • attributionImage: URL to the attribution image for this menu
  • attributionImageLink: URL for the link to apply to the attribution image for this menu
  • entries: a list of entry maps (documents).
    • id: the entries ID. This must be a unique ID across all menu entries in the SP systems
    • type: the type of entry. One of: section, item
    • orderNum: the order number for this entry. A one (1) based number.
    • title: the title of the entry. Should be single-lined.
    • name: the unique name of the entry within the menu.
    • desc: the description for the entry. Can be multi-lined.
    • Note: The following values are for item entries
    • prices: if the entry is an item, this is a list of price maps (documents)
      • orderNum: the order number of a price in the list of prices. A one (1) based number.
      • title: the title of a price
      • price: the price itself (just the number, no currency symbol)
      • unit: the price unit. A text field displayed directly after the prices for values like each and per pound.
      • calories: the number of calories for the entry
    • allergens: a list of common allergens in this dish. This list conforms to the standard format of lists DOCS:as outlined above\. Usually in: egg, fish, dairy, shellfish, soy, peanut, tree nut, wheat
    • allergenFree: a list of common allergens NOT in this dish. This list conforms to the standard format of lists DOCS:as outlined above\. Usually in: egg-free, fish-free, dairy-free, shellfish-free, soy-free, peanut-free, tree nut-free, gluten-free
    • restrictions: The list of religious, ethical or personal restrictions to which the dish adheres. Includes: halal, kosher, vegan, vegetarian
    • spicy: The level of spiciness at four levels: none, mild, medium, hot

Sample Menu Data

Here is a sample of what a menu would look like.

{"menus":[{"name":597359,"title":"Dinner Menu","desc":"","footnote":"","state":"enabled","entries":[{"title":"Tapas & Appetizers","name":"tapas--appetizers","type":"section","orderNum":1,"desc":"Tapas Sampler (choose 4) $34","id":"s3328235"},{"title":"Meatballs","name":"meatballs","type":"item","orderNum":2,"desc":"shiitake mushroom caps, shaved parmesan, espagnole sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"10.00","unit":"","calories":""}],"id":"24602844"},{"title":"Blackened Shrimp","name":"blackened-shrimp","type":"item","orderNum":3,"desc":"avocado salad, mango vinaigrette.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"13.00","unit":"","calories":""}],"id":"24602851"},{"title":"Vegetable Spring Rolls","name":"vegetable-spring-rolls","type":"item","orderNum":4,"desc":"sesame ginger vinaigrette.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"9.00","unit":"","calories":""}],"id":"24602859"},{"title":"Lobster Mac N Cheese","name":"lobster-mac-n-cheese","type":"item","orderNum":5,"desc":"white cheddar & parmesan, lobster cream sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"15.00","unit":"","calories":""},{"title":"","orderNum":"","price":"23.00","unit":"","calories":""}],"id":"24602867"},{"title":"Crab Cakes","name":"crab-cakes","type":"item","orderNum":6,"desc":"pepper chutney, sweet basil butter sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"12.00","unit":"","calories":""}],"id":"24602877"},{"title":"Potato Gnocchi","name":"potato-gnocchi","type":"item","orderNum":7,"desc":"julienne of sun dried tomato, creamy pesto sauce.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"10.00","unit":"","calories":""},{"title":"","orderNum":"","price":"18.00","unit":"","calories":""}],"id":"24602885"},{"title":"Grilled Chicken Satays","name":"grilled-chicken-satays","type":"item","orderNum":8,"desc":"plum dipping sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"9.00","unit":"","calories":""}],"id":"24602898"},{"title":"Blackened Scallops","name":"blackened-scallops","type":"item","orderNum":9,"desc":"sweetcorn salsa, dill sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"12.00","unit":"","calories":""}],"id":"24602903"},{"title":"Coconut Shrimp","name":"coconut-shrimp","type":"item","orderNum":10,"desc":"mango & cucumber salsa, tequila, lime dipping sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"14.00","unit":"","calories":""}],"id":"24602913"},{"title":"Tartare Of Tuna & Avocado","name":"tartare-of-tuna--avocado","type":"item","orderNum":11,"desc":"wasabi paste & chilli sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"13.00","unit":"","calories":""}],"id":"24602921"},{"title":"Steamed Pei Mussels","name":"steamed-pei-mussels","type":"item","orderNum":12,"desc":"white wine garlic broth or fra-diavalo.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"11.00","unit":"","calories":""}],"id":"24602928"},{"title":"Dumplings","name":"dumplings","type":"item","orderNum":13,"desc":"fried shrimp & chicken, ponzo sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"11.00","unit":"","calories":""}],"id":"24602935"},{"title":"Beef Satays","name":"beef-satays","type":"item","orderNum":14,"desc":"wasabi scallion dip.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"10.00","unit":"","calories":""}],"id":"24602942"},{"title":"Chicken & Cashew Nut Spring Rolls","name":"chicken--cashew-nut-spring-rolls","type":"item","orderNum":15,"desc":"hot & sweet dipping sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"10.00","unit":"","calories":""}],"id":"24602948"},{"title":"Goat Cheese Stuffed Portabella","name":"goat-cheese-stuffed-portabella","type":"item","orderNum":16,"desc":"warm lentil ragout, baby arugula, white balsamic.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"11.00","unit":"","calories":""}],"id":"24602955"},{"title":"Classic French Onion Soup","name":"classic-french-onion-soup","type":"item","orderNum":17,"desc":null,"allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24602964"},{"title":"Banc Soup Du Jour","name":"banc-soup-du-jour","type":"item","orderNum":18,"desc":null,"allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24602970"},{"title":"Salads","name":"salads","type":"section","orderNum":19,"desc":null,"id":"s3328257"},{"title":"Organic Greens","name":"organic-greens","type":"item","orderNum":20,"desc":"wild mushrooms, shaved parmesan, toasted cashew nuts, fig vinaigrette.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"9.00","unit":"","calories":""}],"id":"24602979"},{"title":"Chopped Salad","name":"chopped-salad","type":"item","orderNum":21,"desc":"french beans, roasted peppers, feta cheese, tomato, portabella, onion & almonds, red wine vinaigrette.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"9.00","unit":"","calories":""}],"id":"24602993"},{"title":"Classic Caesar","name":"classic-caesar","type":"item","orderNum":22,"desc":"shaved reggiano & herb crouton.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"9.00","unit":"","calories":""}],"id":"24603004"},{"title":"Mixed Seasonal Greens","name":"mixed-seasonal-greens","type":"item","orderNum":23,"desc":"white balsamic vinaigrette.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"7.00","unit":"","calories":""}],"id":"24603013"},{"title":"Country Salad","name":"country-salad","type":"item","orderNum":24,"desc":"boston lettuce, radicchio, endive, apple, gorgonzola, toasted walnuts, apple cider vinaigrette.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"9.00","unit":"","calories":""}],"id":"24603024"},{"title":"Fresh Mozzarella & Plum Tomato","name":"fresh-mozzarella--plum-tomato","type":"item","orderNum":25,"desc":"fresh basil, evo & aged balsamic.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"10.00","unit":"","calories":""}],"id":"24603038"},{"title":"Warm Goat Cheese & Beet Parfait","name":"warm-goat-cheese--beet-parfait","type":"item","orderNum":26,"desc":"baby arugula, frisee, lemon & black pepper vinaigrette.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"10.00","unit":"","calories":""}],"id":"24603045"},{"title":"Chilled Lump Crabmeat Napoleon","name":"chilled-lump-crabmeat-napoleon","type":"item","orderNum":27,"desc":"baby arugula, shaved fennel, avocado, citrus vinaigrette.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"16.00","unit":"","calories":""}],"id":"24603054"},{"title":"Grilled Chicken Breast","name":"grilled-chicken-breast","type":"item","orderNum":28,"desc":"over french beans with grilled pear & artichoke, walnut cranberry vinaigrette.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"15.00","unit":"","calories":""}],"id":"24603058"},{"title":"Thai Beef","name":"thai-beef","type":"item","orderNum":29,"desc":"baby field greens, cucumber linguine, scallions, mango vinaigrette.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"15.00","unit":"","calories":""}],"id":"24603063"},{"title":"Salads - Salad Toppings","name":"salads---salad-toppings","type":"section","orderNum":30,"desc":null,"id":"s3328269"},{"title":"Chicken","name":"chicken","type":"item","orderNum":31,"desc":null,"allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24603071"},{"title":"Grilled Shrimp","name":"grilled-shrimp","type":"item","orderNum":32,"desc":null,"allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"10.00","unit":"","calories":""}],"id":"24603076"},{"title":"Grilled Salmon","name":"grilled-salmon","type":"item","orderNum":33,"desc":null,"allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"9.00","unit":"","calories":""}],"id":"24603082"},{"title":"Crab Cakes","name":"crab-cakes-34","type":"item","orderNum":34,"desc":null,"allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"9.00","unit":"","calories":""}],"id":"24603089"},{"title":"Entrees","name":"entrees","type":"section","orderNum":35,"desc":null,"id":"s3328274"},{"title":"Roasted Chicken","name":"roasted-chicken","type":"item","orderNum":36,"desc":"confit leg, wild mushroom risotto, saute spinach, corn niblets, au jus.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"22.00","unit":"","calories":""}],"id":"24603097"},{"title":"Braised Lamb Shank","name":"braised-lamb-shank","type":"item","orderNum":37,"desc":"garlic whipped potato, root vegetables, rosemary sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"22.00","unit":"","calories":""}],"id":"24603105"},{"title":"Angel Hair Pasta","name":"angel-hair-pasta","type":"item","orderNum":38,"desc":"saute chicken, spinach, roasted peppers, english peas, vodka pink sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"19.00","unit":"","calories":""}],"id":"24603110"},{"title":"Baked New England Cod","name":"baked-new-england-cod","type":"item","orderNum":39,"desc":"sweet potato & shrimp hash, asparagus, tomato caper butter sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"21.00","unit":"","calories":""}],"id":"24603117"},{"title":"Pistachio Crusted Chicken Breast","name":"pistachio-crusted-chicken-breast","type":"item","orderNum":40,"desc":"buttermilk whipped potato, green beans, port wine sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"19.00","unit":"","calories":""}],"id":"24603124"},{"title":"Lobster Ravioli","name":"lobster-ravioli","type":"item","orderNum":41,"desc":"rock shrimp & calamari, lobster sautern sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"22.00","unit":"","calories":""}],"id":"24603131"},{"title":"Filet Mignon","name":"filet-mignon","type":"item","orderNum":42,"desc":"(available pepper crusted) twice baked roquefort potato, roast asparagus spears, classic au poivre sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"32.00","unit":"","calories":""}],"id":"24603140"},{"title":"Skirt Steak Frites","name":"skirt-steak-frites","type":"item","orderNum":43,"desc":"carmelized onion sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"20.00","unit":"","calories":""}],"id":"24603147"},{"title":"Sesame Crusted Salmon","name":"sesame-crusted-salmon","type":"item","orderNum":44,"desc":"jasmine rice, snow peas & leeks, ginger soy buerre blanc.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"23.00","unit":"","calories":""}],"id":"24603155"},{"title":"Saute Jumbo Shrimp & Sea Scallops","name":"saute-jumbo-shrimp--sea-scallops","type":"item","orderNum":45,"desc":"smoked bacon & butternut risotto, asparagus, herb butter sauce.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"22.00","unit":"","calories":""}],"id":"24603163"},{"title":"Vegetarian","name":"vegetarian","type":"section","orderNum":46,"desc":null,"id":"s3328285"},{"title":"Wholewheat Linguine Pasta","name":"wholewheat-linguine-pasta","type":"item","orderNum":47,"desc":"saute vegetables, roasted garlic parmesan broth.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"17.00","unit":"","calories":""}],"id":"24603173"},{"title":"Eggplant Parmigiana","name":"eggplant-parmigiana","type":"item","orderNum":48,"desc":"napoleon of eggplant, mozzarella, portabella, parmesan cheese & marinara sauce.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"17.00","unit":"","calories":""}],"id":"24603181"},{"title":"Vegetable Plate","name":"vegetable-plate","type":"item","orderNum":49,"desc":"assorted garden vegetables sauteed with garlic & olive oil or plain steamed with spring rice blend.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"13.00","unit":"","calories":""}],"id":"24603189"},{"title":"Butternut Squash Ravioli","name":"butternut-squash-ravioli","type":"item","orderNum":50,"desc":"diced butternut & english peas, alfredo sauce.","allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"17.00","unit":"","calories":""}],"id":"24603197"},{"title":"Casual Fare","name":"casual-fare","type":"section","orderNum":51,"desc":null,"id":"s3328288"},{"title":"Shepherds Pie","name":"shepherds-pie","type":"item","orderNum":52,"desc":"freshly ground sirloin, peas, carrots & onions topped with toasted mashed potatoes.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"15.00","unit":"","calories":""}],"id":"24603206"},{"title":"Filet Mignon Baguette","name":"filet-mignon-baguette","type":"item","orderNum":53,"desc":"open faced, saute onions, grilled portabella, glazed gorgonzola, horseradish mayo & french fries.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"16.00","unit":"","calories":""}],"id":"24603212"},{"title":"Banc Signature Burger","name":"banc-signature-burger","type":"item","orderNum":54,"desc":"cajun dusted chopped sirloin, portabella, roasted peppers, goat cheese, crispy bacon, chipotle mayo, french fries.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"14.00","unit":"","calories":""}],"id":"24603216"},{"title":"Chopped Sirloin Burger","name":"chopped-sirloin-burger","type":"item","orderNum":55,"desc":"choice of toppings & french fries.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"12.00","unit":"","calories":""}],"id":"24603222"},{"title":"Homemade Vegetarian Burger","name":"homemade-vegetarian-burger","type":"item","orderNum":56,"desc":"choice of toppings & sweet potato fries.","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"12.00","unit":"","calories":""}],"id":"24603227"},{"title":"Sides","name":"sides","type":"section","orderNum":57,"desc":null,"id":"s3328290"},{"title":"Brussels Sprouts","name":"brussels-sprouts","type":"item","orderNum":58,"desc":"with smoked bacon & onions","allergens":[],"allergenFree":[],"restrictions":[],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24603232"},{"title":"Sweet Potato Hash","name":"sweet-potato-hash","type":"item","orderNum":59,"desc":null,"allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24603238"},{"title":"Pan Roasted French Bean & Grape Tomatoes","name":"pan-roasted-french-bean--grape-tomatoes","type":"item","orderNum":60,"desc":null,"allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24603245"},{"title":"Parmesan Dusted French Fries","name":"parmesan-dusted-french-fries","type":"item","orderNum":61,"desc":null,"allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24603251"},{"title":"Sweet Potato Fries","name":"sweet-potato-fries","type":"item","orderNum":62,"desc":null,"allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24603257"},{"title":"Mac N Cheese","name":"mac-n-cheese","type":"item","orderNum":63,"desc":null,"allergens":[],"allergenFree":[],"restrictions":["vegetarian"],"spicy":"","prices":[{"title":"","orderNum":"","price":"6.00","unit":"","calories":""}],"id":"24603262"}],"id":"m1x58k1njygsubjzfwgak5djn","disclaimer":"Disclaimer: Always check with the business for pricing and availability of menu items. SinglePlatform is not responsible for menu or pricing changes, but the information is believed to be accurate when posted. Listing of a menu does not mean that there is any affiliation, endorsement or sponsorship between SinglePlatform and the listed business.","attributionImage":"http:\/\/a.singleplatform.com\/SP-DataManagement\/banc-cafe\/provided_by_2.png","attributionImageLink":"http:\/\/info.singleplatform.com\/menu?ref=SP-DataManagement","secureAttributionImage":"https:\/\/as.singleplatform.com\/SP-DataManagement\/banc-cafe\/provided_by_2.png","secureAttributionImageLink":"http:\/\/info.singleplatform.com\/menu?ref=SP-DataManagement"}],"locationToMenus":{"locationId":"banc-cafe","locationToMenus":[{"id":"m1x58k1njygsubjzfwgak5djn","name":"597359","orderNum":"0","state":"enabled"}]},"location":{"id":"banc-cafe","factualId":"a2e3baf2-eae4-4017-98d1-1cf4ab02d145","outOfBusiness":false,"publishedAt":"2012-03-09 10:35:56","general":{"name":"Banc Cafe","timeZone":"EST","desc":"A neighborhood bar restaurant occupying the space of a 1920's bank. The decor is inspired by nineteenth century Parisian establishments. Terra Cotta textured walls, dimly lit chandelier's, copper table tops & curved banquette seating create a very unique and intimate setting. \r\n\r\nExecutive Chef, John J. Loughran formerly of River Cafe in Brooklyn has created a menu that changes seasonally using the best of locally sourced ingredients. Chef John's philosophy, buy local and be creative. This is evident in every dish you taste at Banc Cafe. \r\n\r\nOur cocktails are created using fresh fruit & natural ingredients.We feel that tasty food & flavorful drinks provided with honest friendly service is a great way to win someone over. We hope that someone is you.\r\n\r\nEnjoy!","website":"http:\/\/www.banccafe.com\/"},"location":{"address1":"431 3rd Ave","address2":"","city":"New York","region":"NY","country":"US","postcode":"10016","longitude":-73.97973,"latitude":40.74351},"phones":{"main":"2122520146","fax":""},"hours":{"mon":{"start":"11:00am","end":"04:00am"},"tue":{"start":"11:00am","end":"04:00am"},"wed":{"start":"11:00am","end":"04:00am"},"thu":{"start":"11:00am","end":"04:00am"},"fri":{"start":"11:00am","end":"04:00am"},"sat":{"start":"11:00am","end":"04:00am"},"sun":{"start":"11:00am","end":"04:00am"},"holidaySchedule":""},"businessType":"Restaurant","hasPhotos":true,"isOwnerVerified":true}}

Short Menu Field Descriptions

A couple notes to help in understanding the field descriptions below:

  • There are multiple types of entries. Each entry type contains a slightly different set of information and is/should be rendered slightly differently.
  • The list of entries is ordered by the orderNum field. The ordering is important as it defines the order in which to render the entries in the menu and which items are in which sections.

A menu consists of a map of the following fields:

  • title: the title of the menu. This is displayed to the user as the name of the menu
  • desc: the description of the menu
  • footnote: A note to display at the bottom of the menu in the menu border.
  • attributionImage: URL to the attribution image for this menu
  • attributionImageLink: URL for the link to apply to the attribution image for this menu
  • entries: a list of entry maps (documents).
    • id: the entries ID. This must be a unique ID across all menu entries in the SP systems
    • type: the type of entry. One of: section, item
    • orderNum: the order number for this entry. A one (1) based number.
    • title: the title of the entry. Should be single-lined.
    • name: the unique name of the entry within the menu.
    • desc: the description for the entry. Can be multi-lined.
    • Note: The following values are for item entries
    • prices: if the entry is an item, this is a list of price maps (documents)
      • orderNum: the order number of a price in the list of prices. A one (1) based number.
      • title: the title of a price
      • price: the price itself (just the number, no currency symbol)
      • unit: the price unit. A text field displayed directly after the prices for values like each and per pound.
      • calories: the number of calories for the entry
    • allergens: a list of common allergens in this dish. This list conforms to the standard format of lists|#List Format. Usually in: egg, fish, dairy, shellfish, soy, peanut, tree nut, wheat
    • allergenFree: a list of common allergens NOT in this dish. This list conforms to the standard format of lists. Usually in: egg-free, fish-free, dairy-free, shellfish-free, soy-free, peanut-free, tree nut-free, gluten-free
    • restrictions: The list of religious, ethical or personal restrictions to which the dish adheres. Includes: halal, kosher, vegan, vegetarian
    • spicy: The level of spiciness at four levels: none, mild, medium, hot