# Create A Recipe

This API available only for user access-token integration

| POST | `/v1/recipes` |
| ---- | ------------- |

Endpoint allows building recipe from scratch.

## 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                                      |
| ------------- | --------------- | ------------------------------------------------ |
| collectionIds | array \[string] | collection identifiers recipe should be added to |
| payload\*     | RecipePayload   | recipe content                                   |

## 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 instruction 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     |
| --------- | ------------------- | --------------- |
| recipe\*  | ManualRecipeDetails | Recipe details. |

## RawIngredient

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

## NormalizedIngredient

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

## 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](#recipelabel)] |             |
| cuisine\*  | array \[[RecipeLabel](#recipelabel)] |             |
| category\* | array \[[RecipeLabel](#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 the current user is the 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 POST "https://graph.whisk.com/v1/recipes" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Token Access-Token>" \
  -d '{
    "collectionIds": [
      "97f77cceca5d11e7ae7e42010a9a0035"
    ],
    "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 sauce",
    "ingredients": [
      {
        "text": "Pappardelle pasta"
      },
      {
        "text": "5 tomatoes"
      },
      {
        "text": "3tbs of olive oil"
      }
    ],
    "saved": {
      "value": true,
      "collectionIds": [
        "cd037513c9e149a1b707e85eab1fc7f6"
      ],
      "owner": true,
      "type": "manual"
    }
  },
  "status": "success"
}
```
