Search recipes
Search recipes by meaning as well as wording, across names, ingredients and descriptions, and return only the fields you need.
/searchAPI keySearches names, ingredients and descriptions. Matching is on meaning as well as wording, so "creamy pasta" also finds carbonara. Results carry a `score` that is only meaningful relative to the others in the same response — do not read it as an absolute rating.
Request
curl 'https://api.tinyplates.dev/search?query=creamy+pasta&limit=3' \
-H 'Authorization: Bearer rd_your_api_key'Sign in to run this request with your own key. Free, 500 requests a day.
Parameters
querystringrequiredWhat to search for.
fieldsstringA comma-separated list of recipe fields to return. `id` and `score` are always included. Use it to keep responses small when you only need a few fields.
languagestringdefaults toenOnly return recipes written in this language, as a two-letter ISO 639-1 code.
limitintegerdefaults to101–50How many results to return. Unlike the list endpoints this one caps at 50, and a value that is not a whole number is ignored rather than rejected.
Response
The matching recipes, best first. When `fields` is set, only the requested fields plus `id` and `score` are present.
Example
{
"results": [
{
"id": "6a980d75ea7517554c2894b1",
"allergens": [],
"createdAt": "2026-09-02T11:50:13.886Z",
"dietary": {
"glutenFree": true,
"source": "declared"
},
"instructions": [
{
"equipment": [
"oven"
],
"step": 1,
"temperature": {
"unit": "F",
"value": 325
},
"text": "Preheat oven to 325°."
},
{
"ingredients": [
"roma-tomato"
],
"step": 2,
"techniques": [
"slicing"
],
"text": "Slice tomatoes in half."
},
{
"ingredients": [
"salt",
"basil",
"oregano",
"thyme"
],
"step": 3,
"techniques": [
"seasoning"
],
"text": "Season with salt, basil, oregano and thyme."
},
{
"equipment": [
"baking-sheet"
],
"ingredients": [
"olive-oil",
"roma-tomato"
],
"step": 4,
"techniques": [
"spraying"
],
"text": "Spray a cookie sheet with olive oil spray and place tomatoes cut side up."
},
{
"duration": {
"seconds": 7200
},
"equipment": [
"oven"
],
"ingredients": [
"roma-tomato"
],
"step": 5,
"techniques": [
"baking"
],
"text": "Bake 2 hrs until skin gets wrinkled and crusty on the bottom and moist in the center."
},
{
"equipment": [
"food-processor"
],
"ingredients": [
"roma-tomato"
],
"step": 6,
"techniques": [
"pureeing"
],
"text": "Puree the tomatoes in a food processor."
},
{
"step": 7,
"text": "If it is too thick, you can thin with pasta water."
},
{
"ingredients": [
"roma-tomato"
],
"step": 8,
"text": "Serve over your favorite high fiber pasta and grated cheese."
}
],
"language": "en",
"media": [
{
"id": "hero",
"role": "hero",
"type": "image",
"url": "https://www.skinnytaste.com/wp-content/uploads/2008/08/roasted-tomatoe-sauce.jpg",
"variants": [
{
"url": "https://www.skinnytaste.com/wp-content/uploads/2008/08/roasted-tomatoe-sauce-425x270.jpg"
}
]
}
],
"nutrition": {
"basis": {
"type": "serving"
},
"calories": {
"unit": "kcal",
"value": 78.1
},
"carbohydrates": {
"unit": "g",
"value": 17.3
},
"fat": {
"unit": "g",
"value": 1.2
},
"fiber": {
"unit": "g",
"value": 4.1
},
"protein": {
"unit": "g",
"value": 3.2
},
"source": "provided"
},
"rating": {
"count": 1,
"reviewCount": 1,
"value": 5
},
"servings": {
"original": "4 servings",
"quantity": 4
},
"times": {},
"title": "Candied Tomato Sauce",
"updatedAt": "2026-09-06T01:39:14.527Z",
"categories": [],
"courses": [],
"cuisines": [
"italian"
],
"ingredients": [
{
"display": "12 ripe Roma tomatoes",
"localName": "Roma tomatoes",
"ingredientId": "roma-tomato",
"name": "Roma tomato",
"optional": false,
"quantity": {
"value": 12
},
"size": "ripe"
},
{
"display": "salt",
"localName": "salt",
"ingredientId": "salt",
"name": "salt",
"note": "to taste",
"optional": false
},
{
"display": "1 tsp thyme",
"localName": "thyme",
"ingredientId": "thyme",
"name": "thyme",
"optional": false,
"quantity": {
"unit": "tsp",
"value": 1
}
},
{
"display": "1 tsp oregano",
"localName": "oregano",
"ingredientId": "oregano",
"name": "oregano",
"optional": false,
"quantity": {
"unit": "tsp",
"value": 1
}
},
{
"display": "olive oil spray",
"localName": "olive oil",
"ingredientId": "olive-oil",
"name": "olive oil",
"optional": false,
"preparation": "spray"
},
{
"display": "2 tbsp basil, chopped",
"localName": "basil",
"ingredientId": "basil",
"name": "basil",
"optional": false,
"preparation": "chopped",
"quantity": {
"unit": "tbsp",
"value": 2
}
}
],
"tags": [
"freezer meals",
"gluten free",
"vegetarian meals"
],
"text": {
"ingredients": [
"12 ripe Roma tomatoes",
"salt",
"1 tsp thyme",
"1 tsp oregano",
"olive oil spray",
"2 tbsp basil, chopped"
],
"instructions": [
"Preheat oven to 325°.",
"Slice tomatoes in half.",
"Season with salt, basil, oregano and thyme.",
"Spray a cookie sheet with olive oil spray and place tomatoes cut side up.",
"Bake 2 hrs until skin gets wrinkled and crusty on the bottom and moist in the center.",
"Puree the tomatoes in a food processor.",
"If it is too thick, you can thin with pasta water.",
"Serve over your favorite high fiber pasta and grated cheese."
]
},
"url": "https://www.skinnytaste.com/candied-tomato-sauce-0-ww-pts/",
"equipment": [
"baking sheet",
"food processor",
"oven"
],
"techniques": [
"baking",
"pureeing",
"seasoning",
"slicing",
"spraying"
],
"score": 0.575
}
]
}Errors
- 400
The query parameter is required.
The `query` parameter was missing or empty.
- 401
An API key is required. Pass it as an Authorization: Bearer header.
No key was sent, and this deployment requires one. Keys are optional today and will become required.
- 401
Invalid API key.
The key does not exist. Check for a truncated copy, or create a new one on your dashboard.
- 401
This API key has been disabled.
The key was revoked. Create a new one on your dashboard.
- 401
This API key has expired.
The key was created with an expiry that has passed. Create a new one.
- 429
Rate limit exceeded for this API key. Try again later.
The account has used its 500 requests for the day. The allowance is per account, so another key will not help. It resets at midnight UTC.
- 500
Something went wrong. Please try again.
The API could not answer. The request was not your fault; retry it, and report it if it keeps happening.
See also