# 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](/api/recipes/user-recipes-and-collections/create-a-recipe.md#recipelabel)] |             |
| cuisine\*  | array \[[RecipeLabel](/api/recipes/user-recipes-and-collections/create-a-recipe.md#recipelabel)] |             |
| category\* | array \[[RecipeLabel](/api/recipes/user-recipes-and-collections/create-a-recipe.md#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"
}
```


---

# 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/create-a-recipe.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.
