# Update External Recipe

This API available only for user access-token integration

| PUT | `/v1/:recipeId` |
| --- | --------------- |

Endpoint allows updating the recipe of any publisher.

The resulting recipe will be saved as a copy of the original recipe for the user.

The new recipe will have a different identifier. Please use it to continue working with the updated recipe.

## Request parameters

| ATTRIBUTE | TYPE            | DESCRIPTION                                                                                           |
| --------- | --------------- | ----------------------------------------------------------------------------------------------------- |
| fields    | array \[string] | Extra fields to return on the recipe Possible values: normalizedIngredients, instructions, nutrition. |

## Request Body

| ATTRIBUTE | TYPE          | DESCRIPTION |
| --------- | ------------- | ----------- |
| payload   | RecipePayload |             |

## Recipe Payload

| ATTRIBUTE    | TYPE                   | DESCRIPTION                         |
| ------------ | ---------------------- | ----------------------------------- |
| name\*       | string                 | recipe name                         |
| description  | string                 | recipe description                  |
| ingredients  | array \[RawIngredient] | recipe ingredients                  |
| images       | array \[OriginalImage] | recipe images                       |
| instructions | RecipeInstructions     | recipe instuction steps             |
| durations    | RecipeDurations        | recipe cooking timing               |
| source       | ManualRecipeSource     | source of the recipe, e.g. web site |
| servings     | number                 | number of servings                  |

## Response

| ATTRIBUTE             | TYPE                          | DESCRIPTION                     |
| --------------------- | ----------------------------- | ------------------------------- |
| id\*                  | string                        |                                 |
| name\*                | string                        |                                 |
| description           | string                        |                                 |
| numberOfServings      | number                        | The original number of servings |
| ingredients           | array \[RawIngredient]        |                                 |
| normalizedIngredients | array \[NormalizedIngredient] |                                 |
| instructions          | RecipeInstructions            |                                 |
| images                | array \[ImageContainer]       |                                 |
| source                | RecipeSource                  |                                 |
| durations             | RecipeDurations               |                                 |
| nutrition             | RecipeNutrition               |                                 |
| constraints           | RecipeConstraints             |                                 |
| saved                 | RecipeSaved                   | Information about collections   |

### RawIngredient

| ATTRIBUTE | TYPE   | DESCRIPTION |
| --------- | ------ | ----------- |
| text\*    | string |             |
| group     | string |             |

### NormalizedIngredient

| ATTRIBUTE | TYPE                     | DESCRIPTION |
| --------- | ------------------------ | ----------- |
| text\*    | string                   |             |
| group     | string                   |             |
| analysis  | RecipeIngredientAnalysis |             |

### RawIngredient

| ATTRIBUTE | TYPE   | DESCRIPTION |
| --------- | ------ | ----------- |
| text\*    | string |             |
| group     | string |             |

### RecipeIngredientAnalysis

| ATTRIBUTE       | TYPE   | DESCRIPTION |
| --------------- | ------ | ----------- |
| product\*       | string |             |
| canonicalName\* | string |             |
| quantity        | number |             |
| unit            | string |             |
| multiplier      | number |             |
| brand           | string |             |
| comment         | string |             |
| category        | string |             |

### RecipeInstruction

| ATTRIBUTE | TYPE                    | DESCRIPTION |
| --------- | ----------------------- | ----------- |
| text\*    | string                  |             |
| group     | string                  |             |
| images    | array \[ImageContainer] |             |

### RecipeInstructions

| ATTRIBUTE | TYPE                       | DESCRIPTION |
| --------- | -------------------------- | ----------- |
| steps\*   | array \[RecipeInstruction] |             |

### ProductCategory

| ATTRIBUTE | TYPE   | DESCRIPTION |
| --------- | ------ | ----------- |
| name\*    | string |             |

### ImageContainer

| ATTRIBUTE    | TYPE            | DESCRIPTION                                                       |
| ------------ | --------------- | ----------------------------------------------------------------- |
| url\*        | string          | original image url, depricated. Please use field original instead |
| original     | OriginalImage   | original image information, e.g. image url                        |
| responsive\* | ResponsiveImage |                                                                   |

### ResponsiveImage

| ATTRIBUTE | TYPE    | DESCRIPTION            |
| --------- | ------- | ---------------------- |
| url\*     | string  | Hosted url of an image |
| width\*   | integer | Image width            |
| height\*  | integer | Image height           |

### OriginalImage

| ATTRIBUTE | TYPE   | DESCRIPTION      |
| --------- | ------ | ---------------- |
| url\*     | string | URL of the image |

### RecipeSource

| ATTRIBUTE       | TYPE           | DESCRIPTION |
| --------------- | -------------- | ----------- |
| name\*          | string         |             |
| displayName     | string         |             |
| sourceRecipeUrl | string         |             |
| license         | string         |             |
| image           | ImageContainer |             |

### RecipeLabels

| ATTRIBUTE  | TYPE                 | DESCRIPTION |
| ---------- | -------------------- | ----------- |
| mealType\* | array \[RecipeLabel] |             |
| cuisine\*  | array \[RecipeLabel] |             |
| category\* | array \[RecipeLabel] |             |

### RecipeLabel

Some RecipeLabel description

| ATTRIBUTE     | TYPE   | DESCRIPTION |
| ------------- | ------ | ----------- |
| name\*        | string |             |
| displayName\* | string |             |

### RecipeDurations

| ATTRIBUTE | TYPE   | DESCRIPTION                 |
| --------- | ------ | --------------------------- |
| cookTime  | number | Cooking time in minutes     |
| prepTime  | number | Preparation time in minutes |
| totalTime | number | Total time in minutes       |

### RecipeConstraints

| ATTRIBUTE  | TYPE                  | DESCRIPTION                                |
| ---------- | --------------------- | ------------------------------------------ |
| violates\* | ConstraintsCollection | Constraints which are violated in a recipe |

### ConstraintsCollection

| ATTRIBUTE    | TYPE  | DESCRIPTION                                                                                                                                                         |
| ------------ | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| diets\*      | array | List of diets Possible values: lacto-vegetarian, ovo-vegetarian, ovo-lacto-vegetarian, pescatarian, vegan, vegetarian.                                              |
| avoidances\* | array | List of avoidances and intolerances Possible values: celery, crustacean, egg, fish, groundnut, milk, mollusc, mustard, sesame, soybean, sulphites, tree-nut, wheat. |

### RecipeSaved

| ATTRIBUTE     | TYPE            | DESCRIPTION                                    |
| ------------- | --------------- | ---------------------------------------------- |
| value         | boolean         | True if this recipe is saved to favorites      |
| collectionIds | array \[string] |                                                |
| owner         | boolean         | If current user is owner of the recipe         |
| type          | enum            | Recipe type Possible values: manual, imported. |

### RecipeAuthor

| ATTRIBUTE | TYPE           | DESCRIPTION |
| --------- | -------------- | ----------- |
| name\*    | string         |             |
| image     | ImageContainer |             |

### Sample Request

```bash
curl -X PUT "https://graph.whisk.com/v1/1070c26c320ce194efca97093e72517b4e7" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Token Access-Token>" \
  -d '{
    "payload": {
      "name": "Home made pasta",
      "description": "Pasta with tomato souce",
      "ingredients": [
        {
          "text": "Pappardelle pasta"
        },
        {
          "text": "5 tomatoes"
        },
        {
          "text": "3tbs of olive oil"
        }
      ]
    }
  }'
```

### Sample Response

```javascript
{
  "recipe": {
    "id": "1070c26c320ce194efca97093e72517b4e7",
    "name": "Home made pasta",
    "description": "Pasta with tomato souce",
    "ingredients": [
      {
        "text": "Pappardelle pasta"
      },
      {
        "text": "5 tomatoes"
      },
      {
        "text": "3tbs of olive oil"
      }
    ],
    "saved": {
      "value": true,
      "collectionIds": [
        "cd037513c9e149a1b707e85eab1fc7f6"
      ],
      "owner": true,
      "type": "manual"
    }
  },
  "status": "success"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.whisk.com/api/recipes/user-recipes-and-collections/updaterecipe.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
