# 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"
}
```
