NAV
shell

Introduction

Welcome to Tastewise API.

You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right. Currently we provide only Shell language binding, but more programming languages can be added on demand.

Authentication

To authorize, use this code:

# With shell, you can just pass the correct header with each request
curl api_endpoint_here \
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

Make sure to replace your-api-key with the provided API key.

The APIs use Bearer token authentication and require specific route permissions. All API requests must include:

Required Headers

Authorization: Bearer your-api-key
X-Customer-Id: customer-id

Alternative Authentication Format

Some endpoints support combining the API key and customer ID in a single Authorization header:

Authorization: Bearer your-api-key^customer-id

Route Permissions

Each API route requires specific permissions in your account:

Route Permission Required Description
/recipes recipes Recipe search and discovery
/restaurants restaurants Restaurant data and menus
/restaurants/bestsellers restaurants_by_token Bestseller analysis (US only)
/restaurants/pricingAnalysis restaurants_by_token Price analysis (US only)
/k12 restaurants K12 school foodservice data
/menus menus Menu item details
/content_discovery content_discovery Social media content
/motivations motivations Consumer motivations
/flavor_combination flavour_combination Flavor pairing analysis
/trend_performance trend_performance Trend tracking
/trend_validation trend_validation Trend validation
/widgets widgets Widget queries
/insights insights Combined insights
/operations operations Combined restaurant/K12 data

Limits

Rate Limiting

The API implements rate limiting to ensure fair usage and system stability. Rate limits are applied per API key and vary by endpoint type.

Default Limits

Endpoint Type Rate Limit Window
Standard endpoints 100 requests per minute
Bulk operations 10 requests per minute
Search endpoints 60 requests per minute

Rate Limit Headers

The API returns rate limit information in response headers:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1642089600

Handling Rate Limits

When you exceed the rate limit, the API returns a 429 Too Many Requests status code:

{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Please wait before making another request.",
  "retry_after": 30
}

Best Practices

  1. Implement exponential backoff - When receiving 429 responses, wait before retrying
  2. Cache responses - Store frequently accessed data locally to reduce API calls
  3. Use bulk endpoints - When available, use bulk operations instead of multiple individual requests
  4. Monitor your usage - Track the rate limit headers to avoid hitting limits

Page Size Limits

The APIs have limits on the maximum number of items returned per request:

Endpoint Type Default Page Size Maximum Page Size
List endpoints 20-50 items 2000 items
Search results 20 items 100 items
Bulk operations N/A 1000 items per batch

Response Caching

Most GET endpoints implement caching via Redis to improve performance:

Endpoints Excluded from Caching

The following endpoints always return fresh data: - /flavor_combination - /restaurants/match - /campbells - All POST, PUT, DELETE operations

Values and constants

Note that all query parameters must be UTF-8 encoded

Measuring system

All APIs are using metric measuring system.

Supported languages

Recipe search is supported for the following languages:

Supported countries

Recipe search is supported for the following countries:

Supported markets

API supports these market values:

Supported delivery platforms

API supports the following delivery platform values:

US:

Canadian:

UK:

Australian:

French:

Indian:

Supported restaurant operation statuses

API supports the following restaurant statuses:

Supported restaurant cuisines

API supports the following cuisine values:

Supported values by which to sort restaurants

The API supports the following sort values:

Supported values to sort restaurants by

API supports the following sort by values:

Supported signal types

Signals are changes in categories such as price, menu listings, and operation status between the current data and the previous month's data.

API supports signals of the following types:

Supported radius values

The radius query parameter can be equal to any integer from 1 to 30 meters.

Supported types

API supports the following sort by values:

Supported categories IDs

API supports the following categories IDs:

Supported life cycle

API supports the following sort by values:

Supported results categories

API supports the following categories IDs:

Supported motivations

API supports the following sort by values:

Supported audiences

API supports the following audience values:

Multiple value query parameters

Some query parameters support multiple values. To pass more than one value to the query, parameter use the vertical bar (|) delimiter to separate different values.
Note that this value needs to be UTF-8 encoded

For example: available_delivery_platforms: doordash|grubhub
In the uri: available_delivery_platforms=doordash%7Cgrubhub

Range query parameters

Some query parameters support range values. To create a range value, use the vertical bar (|) delimiter to separate from and to values.
Note that this value needs to be UTF-8 encoded

For example, 1|10 means from 1 to 10.
In the uri: 1%7C10

Search syntax

AND

This is the default between 2 (and more) terms. It will capture results that include all the terms.

Example: banana apple cake

OR

Will capture results that include at least one out of the 2 terms.

Syntax: Term 1 OR Term 2
Example: coffee OR tea

Will capture results that include the words "almond milk" mentioned as one phrase.

Syntax: Phrase
Example: "Almond Milk"

Exact Search AND Term

Will capture results that include the words "almond milk" mentioned as one phrase and the word coffee. The search should be encoded.

Syntax: Phrase|Term
Example: "Almond Milk"|Coffee

NOT

Will exclude results mentioned after 'NOT' term in the query. The exclusion term should always be mentioned at the end of the query.

Syntax: Term 1 OR Term 2 NOT Term 3
Example: coffee OR tea NOT dessert

Recipes

curl https://api.tastewise.io/recipes/popular
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "description": "1920 Famous Ritz Carlton Lemon Pound Cake Recipe is the one for you! This dense, old-fashioned buttery lemon pound cake was a favorite dessert at the Ritz Carlton in the 1920's and it's still popular today.",
    "url": "https://www.throughherlookingglass.com/ritz-carlton-lemon-pound-cake-recipe/",
    "site_name": "Through Her Looking Glass",
    "domain": "throughherlookingglass.com",
    "ingredients": [
      "Lemon, Zest of",
      "Eggs, large",
      "Lemon juice, fresh squeezed",
      "All-purpose flour",
      "Baking powder",
      "Salt",
      "Shortening",
      "Sugar",
      "Butter, unsalted",
      "Whole milk"
    ],
    "recipe_name": "1920 Famous Ritz Carlton Lemon Pound Cake",
    "country": "mexico",
    "recipe_image": "https://i.pinimg.com/originals/41/d2/cb/41d2cb4d7b8982067f70a808c2650c58.jpg",
    "count": 1244554,
    "growth": 0.85454547779
  }
]

Note: growth value is in percents (%).

Top 50 Recipes with the most saves

HTTP Request

GET https://api.tastewise.io/recipes/popular

Query Parameters

Parameter Default Type Description
country Geographic availability of recipes (See: supported countries).
primary_country If true, Limit recipes to provided country only.
language english Recipes language (See: supported languages).
search Search string (dish/ingredient/claim).
limit Maximum results to return. Capped at a number determined in your plan.
owner_recipes Optional: Whether to search inside, outside (or both) customer's recipes. Allowed values: 0 (outside), 1 (inside).
category string
(closed list)
Adjusts the results to data relevant only to a specific category.
custom_category string Tailored search based on a predefined list of terms
curl https://api.tastewise.io/recipes/trending
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "description": "1920 Famous Ritz Carlton Lemon Pound Cake Recipe is the one for you! This dense, old-fashioned buttery lemon pound cake was a favorite dessert at the Ritz Carlton in the 1920's and it's still popular today.",
    "url": "https://www.throughherlookingglass.com/ritz-carlton-lemon-pound-cake-recipe/",
    "site_name": "Through Her Looking Glass",
    "domain": "throughherlookingglass.com",
    "ingredients": [
      "Lemon, Zest of",
      "Eggs, large",
      "Lemon juice, fresh squeezed",
      "All-purpose flour",
      "Baking powder",
      "Salt",
      "Shortening",
      "Sugar",
      "Butter, unsalted",
      "Whole milk"
    ],
    "recipe_name": "1920 Famous Ritz Carlton Lemon Pound Cake",
    "country": "mexico",
    "recipe_image": "https://i.pinimg.com/originals/41/d2/cb/41d2cb4d7b8982067f70a808c2650c58.jpg",
    "count": 1244554,
    "growth": 0.85454547779
  }
]

Note: growth value is in percents (%).

Top 50 fastest growing recipes from the last 30 days

HTTP Request

GET https://api.tastewise.io/recipes/trending

URL Parameters

Parameter Default Type Description
country all Geographic availability of recipes (See: supported countries).
primary_country false If true, Limit recipes to provided country only.
language english Recipes language (See: supported languages).
search Search string (dish/ingredient/claim).
limit Maximum results to return. Capped at a number determined in your plan.
owner_recipes Optional: Whether to search inside, outside (or both) customer's recipes. Allowed values: 0 (outside), 1 (inside).
category string
(closed list)
Adjusts the results to data relevant only to a specific category.
custom_category string Tailored search based on a predefined list of terms

Ingredients

curl https://api.tastewise.io/recipes/ingredients/trending
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "name": "schezwan sauce",
    "growth": 8.058896186328084,
    "recipes_saves_count": 222329
  },
  {
    "name": "rice coconut milk",
    "growth": 51.29183429778224,
    "recipes_saves_count": 12731
  }
]

Note: share value is in percents (%).

This endpoint retrieves the collection of trending ingredients.

HTTP Request

GET https://api.tastewise.io/recipes/ingredients/trending

URL Parameters

Parameter Default Type Description
country Geographic availability of recipes. Available countries are: United States, Germany, Mexico.
primary_country false If true, Limit recipes to provided country only.
language Recipes language. Available languages are: English, German, Spanish.
search Search string (dish/ingredient/claim).
owner_recipes Optional: Whether to search inside, outside (or both) customer's recipes. Allowed values: 0 (outside), 1 (inside).
curl https://api.tastewise.io/recipes/ingredients/popular
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "name": "sugar",
    "share": 31.310902252471497,
    "recipes_saves_count": 3105997671
  },
  {
    "name": "vinegar",
    "share": 8.268334505283843,
    "recipes_saves_count": 820207208
  }
]

Note: share value is in percents (%).

This endpoint retrieves the collection of popular ingredients.

HTTP Request

GET https://api.tastewise.io/recipes/ingredients/popular

URL Parameters

Parameter Default Type Description
country Geographic availability of recipes. Available countries are: United States, Germany, Mexico.
primary_country false If true, Limit recipes to provided country only.
language english Recipes language. Available languages are: English, German, Spanish.
search Search string (dish/ingredient/claim).
owner_recipes Optional: Whether to search inside, outside (or both) customer's recipes. Allowed values: 0 (outside), 1 (inside).

Dishes

curl https://api.tastewise.io/recipes/dishes/trending
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "name": "kombu dashi",
    "share": 5.353253009052285
  },
  {
    "name": "buko pandan",
    "share": 4.656117997905584
  }
]

Note: share value is in percents (%).

This endpoint retrieves the collection of trending dishes.

HTTP Request

GET https://api.tastewise.io/recipes/dishes/trending

URL Parameters

Parameter Default Type Description
country Geographic availability of recipes. Available countries are: United States, Germany, Mexico.
primary_country false If true, Limit recipes to provided country only.
language Recipes language. Available languages are: English, German, Spanish.
search Search string (dish/ingredient/claim).
owner_recipes Optional: Whether to search inside, outside (or both) customer's recipes. Allowed values: 0 (outside), 1 (inside).
curl https://api.tastewise.io/recipes/dishes/popular
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "name": "chicken broth",
    "share": 4.977483044759269
  },
  {
    "name": "salad",
    "share": 4.829062496709068
  }
]

Note: share value is in percents (%).

This endpoint retrieves the collection of popular dishes.

HTTP Request

GET https://api.tastewise.io/recipes/dishes/popular

URL Parameters

Parameter Default Type Description
country Geographic availability of recipes. Available countries are: United States, Germany, Mexico.
primary_country false If true, Limit recipes to provided country only.
language english Recipes language. Available languages are: English, German, Spanish.
search Search string (dish/ingredient/claim).
owner_recipes Optional: Whether to search inside, outside (or both) customer's recipes. Allowed values: 0 (outside), 1 (inside).

Side Dishes

curl https://api.tastewise.io/recipes/side_dishes
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "key": "hƤhnchen",
    "size": 90.301,
    "high_level_category": "herzhafte gerichte",
    "mid_level_category": "geflügel",
    "high_level_category_en": "savory foods",
    "mid_level_category_en": "poultry",
    "key_en": "chicken"
  },
  {
    "key": "salat",
    "size": 17.376,
    "high_level_category": "herzhafte gerichte",
    "mid_level_category": "salate",
    "high_level_category_en": "savory foods",
    "mid_level_category_en": "salads",
    "key_en": "salad"
  }
]

This endpoint retrieves the collection of side dishes.

HTTP Request

GET https://api.tastewise.io/recipes/side_dishes

URL Parameters

Parameter Default Type Description
country Geographic availability of recipes. Available countries are: Germany.
recipe_name string Required. NA. This is a Free Text field.
source Social string (closed list: Social / Menu) Data used for side dish suggestions.
type all string (closed list: Sweet / Savory) Segmentation of side dishes based on flavor

Motivations

curl https://api.tastewise.io/motivations
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "name": "tasty",
    "category": "experience",
    "share": 24.028690974297668,
    "yoy_change": -6.814114900013019,
    "monthly_change": -0.11125755372542187
  }
]

Note: Changes and share are in percents (%).

Top 50 consumer needs (based on specified parameters) with highest social penetration

HTTP Request

GET https://api.tastewise.io/motivations

URL Parameters

Parameter Default Type Description
country United States Geographic focus of the motivators.
language English Motivations language.
search Search string.
category string
(closed list)
Adjusts the results to data relevant only to a specific category.
motivation string
(closed list)
filter the results by motivation type.
custom_category string Tailored search based on a predefined list of terms
audience string
(closed list)
Adjusts the results to data relevant only to a specific audience
sort_by string Sort the results by using a specific field from the response.

Content Discovery

curl https://api.tastewise.io/content_discovery
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "url": "https://instagram.com/p/CLF7XlLADlV",
    "text": "Happy #NationalPizzaDay - although I fold mine and eat it like a taco. šŸ•šŸŒ®"
  },
  {
    "url": "https://instagram.com/p/CLzFziWnPw8",
    "text": "How did the unassuming sheet pan become a home-cooking star?" Sheet pans are essential to professional kitchens, but with far more function than form, they don’t scream for attention. And yet this utilitarian piece of equipment has become a star — not least because the actual cooking requires nothing more than passive waiting. Tap the link in our bio for 20 (often surprising, always delicious) recipes from @nytcooking for the most versatile pan in your kitchen. Here’s what’s in these photos:Baked Feta With Broccolini, Tomatoes and Lemon šŸ“ø @bryangardnerphotography, with food styling by @bwashbuOven Bacon and Eggs šŸ“ø @andrewhughpurcell, with food styling by @carrieannpurcellCumin Pork Chops and Brussels Sprouts šŸ“ø @christophertestani, with food styling by @chrisnlanier, prop styling by @carlagharSheet-Pan Pizza With Asparagus and Arugula. šŸ“ø @ryanliebe, with food styling by @bwashbuGochujang Chicken and Roasted Vegetables šŸ“ø @christophertestani, with food styling by @chrisnlanier, prop styling by @carlaghar
  }
]

This endpoint retrieves the top 20 most popular social media posts, matching the given search parameters

HTTP Request

GET https://api.tastewise.io/content_discovery

URL Parameters

Parameter Default Type Description
country United States Geographic focus of the posts.
language English Posts language.
search Search string.
custom_category string Tailored search based on a predefined list of terms
audience string
(closed list)
Adjusts the results to data relevant only to a specific audience

Trend Validation

curl https://api.tastewise.io/trend_validation
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "trend_stage": "mature",
  "menu_share": 40.803828705319305,
  "social_share": 5.111506996005478,
  "recipe_share": 1.9821370285748197,
  "yoy_menu_change": -0.6,
  "yoy_social_change": -2.74,
  "yoy_recipe_change": 0.05,
  "menus": 409242,
  "dishes": 4248820,
  "posts": 3233380,
  "recipes": 5797
}

Note: Changes and shares are in percents (%).

Search-Based Analytics: Menu, Social, and Recipe Shares with YoY Trends

HTTP Request

GET https://api.tastewise.io/trend_validation

URL Parameters

Parameter Default Type Description
country United States Geographic focus of the trend.
language English Trend language.
search Required. Search string.
custom_category string Tailored search based on a predefined list of terms

Trend Performance

curl https://api.tastewise.io/trend_performance
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "social": [
    {
      "period_time": "2022-01-01",
      "size": 0.118
    },
    {
      "period_time": "2022-02-01",
      "size": 0.114
    }
  ]
}

Note: Changes and shares are in percents (%).

24-Month Social Trends and Analysis

HTTP Request

GET https://api.tastewise.io/trend_performance

URL Parameters

Parameter Default Type Description
country United States Geographic focus of the trend.
language English Trend language.
search Required. Search string.
category string
(closed list)
Adjusts the results to data relevant only to a specific category.
custom_category string Tailored search based on a predefined list of terms
audience string
(closed list)
Adjusts the results to data relevant only to a specific audience

Restaurants

Search Restaurants

curl https://api.tastewise.io/restaurants/?page=1&page_size=2&sort_order=asc&sort_by=popularity
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": 1634232829702840,
      "name": "Sakura Tokyo",
      "street": "604 Nostrand Avenue",
      "city": "new york",
      "state": "new york",
      "country": "united states"
    },
    {
      "id": 163419208070666,
      "name": "Opai Thai",
      "street": "722 Amsterdam Avenue",
      "city": "new york",
      "state": "new york",
      "country": "united states"
    }
  ],
  "total": 2
}

List of restaurants based on search parameters

HTTP Request

GET https://api.tastewise.io/restaurants

URL Parameters

Parameter Default Type Example Description
page_size 20 number
(limited)
20 Number of the restaurants returned
page 1 number 1 Number of the page
sort_order asc string
(closed list)
asc Order either asc or desc
sort_by popularity string
(closed list)
popularity The parameter by which results are sorted
lat number 40.7936156 Latitude of the restaurant location
lng number -73.9709012 Longitude of the restaurant location
radius 5 number
(metric)
(closed list)
5 Radius of the geo-search range based on the lat and lng.
state string new york The state in which the restaurant is located
city string new york The city in which the restaurant is located
street string 722 Amsterdam Avenue The street on which the restaurant is located
zip number 10025 Zipcode of the restaurant
available_delivery_platforms string
(multiple)
(closed list)
doordash|grubhub Food delivery platforms on which the restaurant is available
not_available_delivery_platforms string
(multiple)
(closed list)
doordash|uber Food delivery platforms on which the restaurant is NOT available
chain_size number
(range)
1|10 The size of the restaurant chain
has_email boolean true Restaurant lists contact email or employee email
has_menu boolean true Restaurant has at least one menu source available
cuisine string
(multiple)
(closed list)
japanese restaurant|indian restaurant Restaurant cuisine type
status string
(multiple)
(closed list)
open|temporarily closed Restaurant operation status
name string Sakura Tokyo Name of the restaurant
market USA string
(closed list)
USA The market in which the restaurant is located
menu_search string pizza Menu name / description
customer_product_list string abc Return restaurants by the customer product list name
cluster_chain boolean true Return only one item per chain once it's true – the page parameter is not available.
includes_related_dishes boolean true Return also related dishes for the product list

Restaurant details

curl https://api.tastewise.io/restaurants/1634232829702840
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "id": 1634232829702840,
  "photo": "https://img.cdn4dd.com/cdn-cgi/image/fit=contain,width=1200,height=672,format=auto/https://doordash-static.s3.amazonaws.com/media/restaurant/cover/SakuraTokyoNostrandAve604BrooklynNY.png",
  "name": "Sakura Tokyo",
  "street": "604 Nostrand Avenue",
  "city": "new york",
  "state": "new york",
  "country": "united states",
  "latitude": 40.67792699999999,
  "longitude": -73.9500063,
  "restaurant_url": "https://tastewise.io/pro/USA/solutions/foodservice-sales/restaurants?restaurant_id=1634232829702840",
  "menu_url": "https://tastewise.io/pro/USA/solutions/foodservice-sales/restaurants?restaurant_id=1634232829702840&menu_open=true",
  "phone_numbers": [
    {
      "phone": "7187568787",
      "count": 3
    },
    {
      "phone": "(718) 756-8787",
      "count": 1
    },
    {
      "phone": "7187568789",
      "count": 1
    },
    {
      "phone": "17187568787",
      "count": 1
    }
  ],
  "zip": "11216",
  "cuisine": "japanese restaurant",
  "email": "sakuratokyo@example_email.com",
  "status": "Open",
  "is_on_uber": true,
  "is_on_grubhub": true,
  "is_on_doordash": true,
  "is_onsite_menu": false,
  "num_of_menus": 3,
  "num_of_locations": 133,
  "website": "http://www.sakuratokyo.net/?utm_source=gmb&utm_medium=website",
  "price_range": "$",
  "facebook": "https://www.facebook.com/pages/Sakura-Tokyo/187497094597505",
  "instagram": "https://www.instagram.com/example-instagram/",
  "google_rating_value": 4.5,
  "google_rating_count": 225,
  "delivery_rating_value": 4.5,
  "delivery_rating_count": 83,
  "opening_hours": {
    "_comment": "restaurant's local time",
    "sunday": [
      {
        "is_closed": true
      }
    ],
    "saturday": [
      {
        "from": "11:00",
        "to": "21:30"
      }
    ],
    "tuesday": [
      {
        "from": "11:00",
        "to": "21:30"
      }
    ],
    "wednesday": [
      {
        "from": "11:00",
        "to": "21:30"
      }
    ],
    "thursday": [
      {
        "from": "11:00",
        "to": "21:30"
      }
    ],
    "friday": [
      {
        "from": "11:00",
        "to": "21:30"
      }
    ],
    "monday": [
      {
        "from": "11:00",
        "to": "21:30"
      }
    ]
  },
  "google_id": "ChIJxwCn8lVYwokRMnMkwq9bhcw"
}

Get restaurant details from the restaurant's Tastewise ID.

HTTP Request

GET https://api.tastewise.io/restaurants/:id

URL Parameters

Parameter Default Type Example Description
market USA string
(closed list)
USA The market in which the restaurant is located

Restaurant's menus

curl https://api.tastewise.io/restaurants/1634232829702840/menus
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "data": [
    {
      "delivery": "doordash",
      "last_updated": "2022-07-31T03:10:54.000Z",
      "menu_items": [
        {
          "category": "Yaki Udon or Soba",
          "description": "Yaki Udon or Soba.",
          "name": "Shrimp",
          "price": 8.75
        },
        {
          "category": "Soup & Salad",
          "description": "",
          "name": "Salmon Skin Salad",
          "price": 4.25
        }
      ]
    },
    {
      "delivery": "on site menu",
      "last_updated": "2022-07-28T13:11:12.000Z",
      "menu_items": [
        {
          "category": "Yaki Udon or Soba",
          "description": "Yaki Udon or Soba.",
          "name": "Shrimp",
          "price": 8.75
        },
        {
          "category": "Soup & Salad",
          "description": "",
          "name": "Salmon Skin Salad",
          "price": 4.25
        }
      ]
    }
  ]
}

Get restaurant menu(s) from the restaurant's Tastewise ID.

HTTP Request

GET https://api.tastewise.io/restaurants/:id/menus

URL Parameters

Parameter Default Type Example Description
market USA string
(closed list)
USA The market in which the restaurant is located

Restaurant's ingredients

curl https://api.tastewise.io/restaurants/1634232829702840/ingredients
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "data": [
    {
      "element": [
        "carbonated water",
        "miso",
        "soda",
        "seltzer",
        "miso soup",
        "grilled salmon",
        "california roll",
        "teriyaki sauce",
        "teriyaki salmon",
        "grilled fish",
        "soup",
        "salmon",
        "fish",
        "sushi"
      ]
    },
    {
      "element": ["mayo", "octopus", "dumpling", "katsu"]
    }
  ]
}

Get restaurant ingredients from the restaurant's Tastewise ID.

HTTP Request

GET https://api.tastewise.io/restaurants/:id/ingredients

URL Parameters

Parameter Default Type Example Description
market USA string
(closed list)
USA The market in which the restaurant is located

Restaurant signals

curl https://api.tastewise.io/restaurants/1634232829702840/signals?signal_types=menu
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "data": {
    "menu": {
      "menu_item_added": [
        {
          "menu_item_id": "2392935_QpCqgLAdEeyJVFVbqn0LBw",
          "data_origin_month": "2022_04",
          "dish_name": "oz bone ribeye",
          "price": 26
        },
        {
          "menu_item_id": "2392935_T5-wcLAVEeyJVFVbqn0LBw",
          "data_origin_month": "2022_04",
          "dish_name": "fried mushroom full order",
          "price": 18
        }
      ],
      "menu_item_price_decrease": [
        {
          "menu_item_id": "2392935_xaDrwBBeEeuLRAO-iaxV4A",
          "data_origin_month": "2022_04",
          "dish_name": "garden salad",
          "old_price": 4,
          "new_price": 5,
          "percentage_changed": 25
        },
        {
          "menu_item_id": "2392935_gy7hcBBeEeuLRAO-iaxV4A",
          "data_origin_month": "2022_04",
          "dish_name": "cowboy beans",
          "old_price": 4,
          "new_price": 5,
          "percentage_changed": 25
        }
      ]
    }
  }
}

Get restaurant signals by type according to last month's data

HTTP Request

GET https://api.tastewise.io/restaurants/:id/signals

URL Parameters

Parameter Default Type Example Description
signal_types menu|delivery|status string
(multiple)
(closed list)
menu|status Restaurant signal types
market USA string
(closed list)
USA The market in which the restaurant is located

Does a restaurant have new signals compared to the previous month?

curl https://api.tastewise.io/restaurants/1634232829702840/signals/hasUpdates
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "id": 1634232829702840,
  "menu": true,
  "delivery": false,
  "status": true
}

Check for any new restaurant signals compared to the previous month.

HTTP Request

GET https://api.tastewise.io/restaurants/:id/signals/hasUpdates

URL Parameters

Parameter Default Type Example Description
signal_types menu|delivery|status string
(multiple)
(closed list)
menu|status Restaurant signal types
market USA string
(closed list)
USA The market in which the restaurant is located

Last Month Restaurant Data

curl https://api.tastewise.io/restaurants/last_month
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": 1634232829702840,
      "name": "Sakura Tokyo",
      "street": "604 Nostrand Avenue",
      "city": "new york",
      "state": "new york",
      "country": "united states",
      "last_month_metrics": {
        "menu_changes": 5,
        "price_changes": 3,
        "rating_change": 0.2,
        "delivery_platforms_change": 1
      }
    }
  ],
  "total": 245,
  "period": "2024-12"
}

Get restaurant data from the previous month for comparison and trend analysis

HTTP Request

GET https://api.tastewise.io/restaurants/last_month

URL Parameters

All parameters from the standard /restaurants endpoint are supported, plus:

Parameter Default Type Description
market USA string
(closed list)
The market in which the restaurant is located

Match restaurant

[Beta]

curl https://api.tastewise.io/restaurants/match?name=Sakura%20Tokyo&city=new%20york&state=new%20york&street=604%20Nostrand%20Avenue
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "id": 1634232829702840,
  "name": "Sakura Tokyo",
  "street": "604 Nostrand Avenue",
  "city": "new york",
  "state": "new york",
  "country": "united states",
  "score": 0.9232
}

Use AI to find the best Tastewise restaurant entity that matches your restaurant criteria. All results will be returned with a match_score that indicates the algorithm match confidence based on your parameters.

HTTP Request

GET https://api.tastewise.io/restaurants/match

URL Parameters

Parameter Default Required Type Example Description
name true string Sakura Tokyo The name of the restaurant
city true string new york The city in which the restaurant is located
street true string 722 Amsterdam Avenue The street in which the restaurant is located
state - string new york The state in which the restaurant is located
market USA - string (closed list) USA The market in which the restaurant is located
phone - string (718)756-8787 Phone number of the restaurant
website - string sakuratokyo.com The official website URL of the restaurant
cuisine - string (closed list) coffee shop Cuisine type of the restaurant
isLongResponse false - boolean true Return extended restaurant details including all available metadata

Bestsellers

curl https://api.tastewise.io/restaurants/bestsellers?menu_search=pizza&city=new%20york
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "photo": "https://img.cdn4dd.com/cdn-cgi/image/fit=contain,width=1200,height=672,format=auto/https://doordash-static.s3.amazonaws.com/media/photos/4c8b8528-44e2-49aa-9a78-b25aec17351c-retina-large-jpeg",
    "name": "sicilian pie pizza",
    "description": "Twice baked crust with olive oil, plum tomato sauce, fresh basil and a blend of Italian cheeses.",
    "chain_name": {
      "name": "artichoke basille's pizza",
      "count": 19
    },
    "place_name": "Artichoke Basille's Pizza",
    "place_website": "artichokepizza.com",
    "tastewise_id": 1634235527455397,
    "price": 39,
    "claims": [
      {
        "name": "italian",
        "category": "cuisine"
      }
    ],
    "tastewise_url": "https://tastewise.io/pro/USA/foodservice-sales/restaurants?restaurant_id=1634235527455397",
    "chain_size": "medium chain"
  }
]

Best selling menu items based on delivery platform best sellers

HTTP Request

GET https://api.tastewise.io/restaurants/bestsellers

URL Parameters

Parameter Default Required Type Example Description
menu_search true string pizza Menu search string
city true string new york The city in which the restaurant is located
chain_size - number
(range)
1|10 The size of the restaurant chain
market USA - string (available values are only USA) USA The market in which the restaurant is located
page 1 - number 1 Number of the page. Maximum value - 5.

Price Analysis

curl https://api.tastewise.io/restaurants/pricingAnalysis?menu_search=pizza&zip_code=10004
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "restaurant": {
    "address": "123 Main Street Anytown, USA 12345",
    "geo_location": [-76.99, 39.12],
    "website_array": [
      {
        "website": "https://www.example.com"
      }
    ],
    "phone_array": [
      {
        "phone": "12376542334"
      }
    ],
    "name": "Pizza Palazzo",
    "tw_id": "1237654233489766"
  },
  "overview": {
    "averagePrice": 15.21,
    "totalNumberOfRestaurants": 68,
    "numberOfRestaurants": 13,
    "numberOfMenuItems": 214
  },
  "menuItems": [
    {
      "restaurantName": "Grubhub Goods",
      "price": 8.39,
      "name": "Large Pizza - Cheese",
      "description": "Mozzarella, provolone, and parmesan cheeses on a parbaked sauced crust",
      "businessType": "single location"
    }
  ],
  "chainSizeBreakDown": {
    "singleLocation": {
      "$": 13.48,
      "$$": 7.83,
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 8,
      "averagePrice": 9.39
    },
    "small": {
      "$": "",
      "$$": "",
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 0,
      "averagePrice": 0
    },
    "medium": {
      "$": "",
      "$$": 15.8,
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 1,
      "averagePrice": 15.8
    },
    "big": {
      "$": 15.76,
      "$$": "",
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 2,
      "averagePrice": 15.76
    },
    "mega": {
      "$": 16.5,
      "$$": "",
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 2,
      "averagePrice": 16.08
    }
  },
  "cuisineBreakDown": {
    "fast food restaurant": {
      "$": "",
      "$$": "",
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 4,
      "averagePrice": 7.99
    },
    "american restaurant": {
      "$": 17.14,
      "$$": 7.58,
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 3,
      "averagePrice": 14.11
    },
    "italian restaurant": {
      "$": 16.32,
      "$$": "",
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 2,
      "averagePrice": 16.32
    },
    "bar": {
      "$": "",
      "$$": 12,
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 1,
      "averagePrice": 12
    },
    "deli": {
      "$": 6.74,
      "$$": "",
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 1,
      "averagePrice": 6.74
    },
    "food delivery service": {
      "$": "",
      "$$": 6.82,
      "$$$": "",
      "$$$$": "",
      "numberOfRestaurants": 1,
      "averagePrice": 6.82
    }
  }
}

[Beta]

HTTP Request

GET https://api.tastewise.io/restaurants/pricingAnalysis

URL Parameters

Parameter Default Required Type Example Description
menu_search true string pizza Menu search string
tastewise_id true string new york Restaurant ID
zip_code true string 10004 Zipcode of the searched are
lat true number 40.7936156 Latitude of the restaurant location
long true number -73.9709012 Longitude of the restaurant location
search_radius 3 - number
(metric)
2 Radius of the geo-search range based on the lat and long or tastewise_id. Maximum value - 10.
market USA - string (available values are only USA) USA The market in which the restaurant is located

You should specify lat&long or tastewise_id or zip_code parameter.

Product List

Add Product

curl https://api.tastewise.io/restaurants/productList?customer_id=abc&sku=123&product_name=burger&product_description=with%20tomato%20and%20onion&product_category=lunch
  -X POST
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

OR in bulk mode:

curl https://api.tastewise.io/restaurants/productList/bulk
  -X POST
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id
  -d '{"webhook": "https://your-webhook-url.com", "products": [{"customer_id": "abc", "sku": "123", "product_name": "burger", "product_description": "with tomato and onion", "product_category": "lunch"}]}'

The above command returns JSON structured like this:

{
  "success": true
}

Add new product list to customer

HTTP Request

POST https://api.tastewise.io/restaurants/productList

OR in bulk mode:

POST https://api.tastewise.io/restaurants/productList/bulk

URL Parameters

Parameter Default Type Example Description
customer_id string abc Required. The name of the customer
sku string 123 Required. The SKU of the product
product_name string burger Required. The name of the product
product_description string with tomato and onion The name of the product
product_category string lunch The name of the product

Delete Product

curl https://api.tastewise.io/restaurants/productList?customer_id=abc&sku=123
  -X DELETE
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "success": true
}

Delete product

HTTP Request

DELETE https://api.tastewise.io/restaurants/productList

URL Parameters

Parameter Default Type Example Description
customer_id string abc Required. The name of the customer
sku string 123 Required. The SKU of the product

Get Products

curl https://api.tastewise.io/restaurants/productList?customer_id=abc
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "_id": "676035ab03981c0838bb7ca7",
    "accountId": "21551",
    "customerId": "abc",
    "sku": "10048400009500",
    "product_name": "CRYSTAL HOT SAUCE SS 200 3GM",
    "product_description": "EPM PLG FS BULK SAUCES - INDUSTRIAL_2",
    "product_category": "FS BULK SAUCES_CT"
  },
  {
    "_id": "675f2d29b45b8797a75ad3cb",
    "accountId": "21551",
    "customerId": "abc",
    "sku": "130000000300",
    "product_name": "HNZ YELLOW MSTRD ORG 20OZ 6CT",
    "product_description": "EPM PLG FS BTL SCE-RETAIL",
    "product_category": "FS BOTTLED SAUCES_CT"
  }
]

Get product list of customer

HTTP Request

GET https://api.tastewise.io/restaurants/productList

URL Parameters

Parameter Default Type Example Description
customer_id string abc Required. The name of the customer

Menus

curl https://api.tastewise.io/menus
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "id": 1634223310438484,
    "platform": "doordash",
    "name": "Basic Breakfast with Bison Sausage",
    "description": "Two eggs with a house-made bison sausage patty. Served with hash browns and toast.",
    "options": [
      "English Muffin",
      "Gluten Free Toast",
      "Homemade Buttermilk Biscuit",
      "Rye Toast",
      "Sourdough Toast",
      "Wheat Toast",
      "Basted",
      "Over Easy",
      "Over Hard",
      "Over Medium",
      "Poached",
      "Scrambled"
    ],
    "price": 19.44
  }
]

If the restaurant_id is connected to K12, the response includes type: "k12":

[
  {
    "platform": "k12",
    "name": "Lasagna Roll Up",
    "description": "",
    "id": "72b0d0027290d556c48ffdc3",
    "type": "k12"
  },
  {
    "platform": "k12",
    "name": "Focaccia Bread",
    "description": "",
    "id": "72b0d0027290d556c48ffdc3",
    "type": "k12"
  }
]

Menu items from restaurants (includes K12 data when restaurant_id is connected to K12)

HTTP Request

GET https://api.tastewise.io/menus

URL Parameters

Parameter Default Type Description
restaurant_id Required. Restaurant ID. Returns K12 data if the ID is connected to K12 school foodservice
market USA string
(closed list)
The market in which the restaurant is located
search string Search string (name/description/options)
curl https://api.tastewise.io/menu_insights?tw_id=1633946999482697&sku=23464&market=USA&customer_id=MFR%3A6868%3A715123
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "executive_summary": "- **Own the red-sauce core:** In Pittsburgh Italian menus, pizza remains the anchor and pizza sauce appears on nearly every competing menu item...\n\n- **Use sauce beyond whole pies:** Competitors' bestsellers show pizza sauce also winning in shareable sides...\n\n- **Bridge classic pizza with Twist signatures:** Pizza Twist already leans into bold ingredients like paneer, green chili, cilantro, and jalapeno...",
  "restaurant": {
    "tw_id": "1633946999482697",
    "name": "Pizza Twist",
    "city": "pittsburgh",
    "state": "pennsylvania",
    "cuisine": "italian restaurant"
  },
  "sku": {
    "sku": "23464",
    "product_name": "Pizza Sauce, Extra Heavy",
    "ingredients": [
      "pizza sauce",
      "pizza"
    ]
  },
  "filter_tier": "city_cuisine",
  "total_market_restaurants": 75,
  "bestselling_opportunities": [
    {
      "name": "the monroe pizza",
      "description": "Tomato sauce, skim mozzarella, Beyond SausageĀ®, fresh basil, and garlic. 12\" Round Gluten Free + Vegan Cauliflower Crust.",
      "restaurant_name": "Boss Bitch Pizza",
      "tw_id": "1746272350104664",
      "ingredients": [
        "beyond meat",
        "pizza sauce",
        "cauliflower crust",
        "pizza",
        "tomato",
        "garlic",
        "mozzarella",
        "basil"
      ],
      "image_url": "https://img.cdn4dd.com/...",
      "price": 19.99
    },
    {
      "name": "breadstick bites",
      "description": "Prepared like our classic Breadsticks, these bite-sized morsels are fun to eat and share! Served with a side of our traditional red pizza sauce.",
      "restaurant_name": "Vocelli Pizza",
      "tw_id": "1634046465318994",
      "ingredients": [
        "breadstick",
        "pizza sauce",
        "pizza"
      ],
      "image_url": "https://img.cdn4dd.com/...",
      "price": 7.99
    }
  ],
  "lto_opportunities": [],
  "ingredient_comparison": [
    {
      "name": "pizza sauce",
      "market_share": 98.32,
      "market_yoy": 0.78,
      "market_index": 50.97,
      "restaurant_share": 13.61,
      "restaurant_yoy": 85.46,
      "restaurant_index": 0.14
    },
    {
      "name": "paneer",
      "market_share": 3.16,
      "market_yoy": 64.25,
      "market_index": 15.29,
      "restaurant_share": 14.97,
      "restaurant_yoy": 31.64,
      "restaurant_index": 4.74
    }
  ],
  "dish_comparison": [
    {
      "name": "chicken curry",
      "market_share": 0.63,
      "market_yoy": 207.57,
      "market_index": 38.23,
      "restaurant_share": 1.36,
      "restaurant_yoy": 78.78,
      "restaurant_index": 2.15
    },
    {
      "name": "pizza",
      "market_share": 98.32,
      "market_yoy": 0.78,
      "market_index": 5.27,
      "restaurant_share": 74.83,
      "restaurant_yoy": 27.05,
      "restaurant_index": 0.76
    }
  ]
}

Get menu insights for a specific restaurant and SKU, including an AI-generated executive summary, bestselling opportunities from competing restaurants, and ingredient/dish comparisons between the restaurant and its local market.

HTTP Request

GET https://api.tastewise.io/menu_insights

URL Parameters

Parameter Default Type Description
tw_id string Required. Tastewise restaurant ID
sku string Required. SKU identifier for the product
customer_id string Required. Customer ID (URL-encoded, e.g. MFR%3A6868%3A715123)
market USA string
(closed list)
The market from which the data is taken
category string
(closed list)
Filter by category. Uses the category text name (e.g. pizza, sandwiches, dairy, sauces and dressings) instead of the numeric ID

Flavor Combination

curl https://api.tastewise.io/flavor_combination
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

[
  {
    "ingredient": "latte",
    "category": "coffee",
    "social_share": 12.69,
    "menus_share": 28.75,
    "recipes_share": 39.65,
    "menus_yoy": 0.03,
    "social_yoy": 1.6,
    "recipes_yoy": 0.01,
    "menus_count": 100073,
    "posts_count": 410298,
    "restaurants_share": 18.51,
    "home_share": 11.77,
    "restaurant_change": -4.1,
    "home_change": -3.8,
    "life_cycle": "mature",
    "index_social": 4.2
  }
]

Top 50 ingredients, flavors and dishes being discussed matching the given search parameters

HTTP Request

GET https://api.tastewise.io/flavor_combination

URL Parameters

Parameter Default Type Description
search Search string.
market USA string
(closed list)
The market from which the data is taken.
category string
(closed list)
Adjusts the results to data relevant only to a specific category. (supports one term at a time)
type string
(closed list)
Filter the results by its type. (supports one term at a time)
life_cycle string
(closed list)
Filter the results by life cycle.
results_category string
(closed list)
Filter the results category. (supports one or multiple terms at a time, seperated by comma)
custom_category string Tailored search based on a predefined list of terms
audience string
(closed list)
Adjusts the results to data relevant only to a specific audience
sort_by string Sort the results by using a specific field from the response.

Widgets

curl https://api.tastewise.io/widgets?query=pizza&queryType=recipes&email=user@example.com&firstname=John&lastname=Doe
  -X POST
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "status": "success",
  "data": {
    "widget_id": "wdg_123456",
    "query_results": [
      {
        "trend": "Detroit-style pizza",
        "growth": 45.2,
        "volume": 128000
      }
    ]
  }
}

Process widget queries for embedded analytics and visualizations

HTTP Request

POST https://api.tastewise.io/widgets

Required Headers

Query Parameters

Parameter Required Type Description
query true string Search query (e.g., pizza, pasta, burger)
queryType true string Query type (see supported query types below)
email true string User's email address
firstname true string User's first name
lastname true string User's last name

Supported Query Types

Insights

curl https://api.tastewise.io/insights?search=plant-based
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "volumes": {
    "social": 245000,
    "menu": 12000,
    "recipe": 34000
  },
  "top_ingredients": [
    {
      "name": "tofu",
      "share": 23.4,
      "growth": 12.5
    },
    {
      "name": "tempeh", 
      "share": 18.2,
      "growth": 34.1
    }
  ],
  "top_dishes": [
    {
      "name": "plant-based burger",
      "share": 31.2,
      "growth": 22.3
    }
  ],
  "consumer_needs": [
    {
      "need": "sustainable",
      "share": 42.1,
      "category": "ethics"
    }
  ],
  "trend_performance": {
    "stage": "emerging",
    "yoy_change": 28.4,
    "forecast": "continued growth"
  }
}

Get comprehensive insights combining multiple data sources for a search term

HTTP Request

GET https://api.tastewise.io/insights

Query Parameters

Parameter Default Required Type Description
search true string Search term for insights
market USA false string
(closed list)
Geographic market focus
language english false string
(closed list)
Language for analysis
category false string
(closed list)
Filter insights to specific category
custom_category false string Tailored search based on predefined list of terms
audience false string
(closed list)
Filter insights for specific audience

Operations

The Operations API combines data from both restaurant and K12 (school) foodservice sectors, providing unified access to institutional food service data.

Search Operations

curl https://api.tastewise.io/operations?customer_id=MFR%3A6868%3A%2D1&page=1&page_size=20
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": "op_123456",
      "name": "Central High School Cafeteria",
      "type": "k12",
      "street": "123 School St",
      "city": "chicago",
      "state": "illinois",
      "operation_status": "open",
      "meal_programs": ["breakfast", "lunch"],
      "enrollment": 1200
    },
    {
      "id": "1634232829702840",
      "name": "University Dining Hall",
      "type": "restaurant",
      "street": "456 Campus Dr",
      "city": "chicago", 
      "state": "illinois",
      "operation_status": "open"
    }
  ],
  "total": 42
}

Search across both restaurant and K12 institutional food service operations

HTTP Request

GET https://api.tastewise.io/operations

Query Parameters

Parameter Default Type Description
customer_id string Required. Customer identifier
page_size 20 number
(limited)
Number of results per page
page 1 number Page number
status string Filter by operation status
sort_order asc string
(closed list)
Sort order (asc/desc)
sort_by name string Field to sort by
city string Filter by city
state string Filter by state
operation_type string (restaurant/k12/all) Filter by operation type
menu_search string Search within menu items
market USA string
(closed list)
Geographic market

Operations Product List

Get Product List

curl https://api.tastewise.io/operations/productList?customer_id=abc
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

Returns the same structure as restaurant product list

Get product list for operations customer

HTTP Request

GET https://api.tastewise.io/operations/productList

Query Parameters

Parameter Required Type Description
customer_id true string Customer identifier

Add Product

curl https://api.tastewise.io/operations/productList
  -X POST
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id
  -d 'customer_id=abc&sku=123&product_name=burger'

Add product to operations customer list

HTTP Request

POST https://api.tastewise.io/operations/productList

Parameters

Parameter Required Type Description
customer_id true string Customer identifier
sku true string Product SKU
product_name true string Product name
product_description false string Product description
product_category false string Product category

Bulk Add Products

curl https://api.tastewise.io/operations/productList/bulk
  -X POST
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id
  -H Content-Type: application/json
  -d '{
    "webhook": "https://your-webhook-url.com",
    "products": [
      {
        "customer_id": "abc",
        "sku": "123",
        "product_name": "burger"
      }
    ]
  }'

Bulk add products with optional webhook notification

HTTP Request

POST https://api.tastewise.io/operations/productList/bulk

Request Body

Parameter Required Type Description
products true array Array of product objects
webhook false string URL for completion notification

Delete Product

curl https://api.tastewise.io/operations/productList?customer_id=abc&sku=123
  -X DELETE
  -H Authorization: Bearer your-api-key
  -H X-Customer-Id: customer-id

Remove product from operations customer list

HTTP Request

DELETE https://api.tastewise.io/operations/productList

Query Parameters

Parameter Required Type Description
customer_id true string Customer identifier
sku true string Product SKU to delete

Webhooks

Overview

Several endpoints support webhook notifications for asynchronous processing. When you provide a webhook URL, the API will send a POST request to your endpoint when the operation completes.

Webhook Request Format

{
  "status": "success",
  "operation": "bulk_product_import",
  "timestamp": "2024-01-15T12:34:56Z",
  "data": {
    "processed": 100,
    "successful": 98,
    "failed": 2,
    "errors": [
      {
        "sku": "12345",
        "error": "Invalid product category"
      }
    ]
  }
}

Supported Endpoints

The following endpoints support webhook notifications:

Endpoint Operation Webhook Trigger
/restaurants/productList/bulk Bulk product import When all products are processed
/operations/productList/bulk Bulk product import When all products are processed

Webhook Configuration

When using webhooks:

  1. Provide a valid HTTPS URL - Webhooks are only sent to secure endpoints
  2. Respond quickly - Your webhook handler should respond with a 2xx status code within 5 seconds
  3. Handle retries - Failed webhook deliveries will be retried up to 3 times with exponential backoff
  4. Verify the source - Consider implementing webhook signature verification for security

Example Webhook Handler

// Express.js webhook handler example
app.post('/webhook/tastewise', (req, res) => {
  const { status, operation, data } = req.body;

  if (status === 'success') {
    console.log(`Operation ${operation} completed successfully`);
    console.log(`Processed: ${data.processed} items`);
  } else {
    console.error(`Operation ${operation} failed`);
  }

  // Respond quickly
  res.status(200).send('OK');

  // Process the webhook data asynchronously
  processWebhookData(req.body);
});

System Endpoints

Health Check

curl https://api.tastewise.io/ping

The above command returns:

pong

Simple health check endpoint to verify API availability

HTTP Request

GET https://api.tastewise.io/ping

Response codes

The APIs may return the following response codes:

Response Code Meaning
200 The request has succeeded
204 No Content. The request has succeeded, but no data was found

Errors

The APIs may return the following error codes:

Error Code Meaning
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Either the API key, the Customer ID is wrong or you don't have access to the API.
403 Forbidden -- You are not allowed to perform the request.
405 Method Not Allowed -- You tried to access the API with an invalid method.
429 Too Many Requests -- You're performing too many requests.
500 Internal Server Error -- We had a problem on the back-end. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.