BETTERMENU
Studio

Create Recipe

Create a new recipe — start a new recipe from scratch.

Only name is required. Country defaults to US and demographic to adults_and_children_over_4. Recipe name must be unique within the organization. Country determines the regulatory authority (US -> US_FDA).

The response carries version_id — the sealed Version ULID — which callers pass back as If-Match on the next mutation for optimistic concurrency. On a conflict the server returns 412 with the current version_id so the client can refetch and retry.

POST
/studio/recipes

Header Parameters

If-Match?|

Optimistic-concurrency token. Pass the version_id returned by the previous mutation (or by GET /recipes/{id}/versions) so the server can reject the request when another writer has advanced the recipe in the meantime. A mismatch surfaces HTTP 412 with the current version_id in the response body so the client can decide whether to retry, merge, or surface the conflict to the user. Only consumed on API versions that declare the recipe_versioning capability — older versions ignore the header.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

curl -X POST "https://loading/studio/recipes" \  -H "Content-Type: application/json" \  -d '{    "name": "Chocolate Chip Cookies"  }'
{
  "data": {
    "id": "string",
    "name": "string",
    "country": "US",
    "regulatory_authority": "US_FDA",
    "demographic": "adults_and_children_over_4",
    "status": "active",
    "created_at": "string",
    "updated_at": "string",
    "summary": {
      "ingredient_count": 0,
      "has_nutrition": true,
      "is_nutrition_current": true,
      "serving_count": 0,
      "has_nutrition_facts": true
    },
    "actions": {
      "can_modify": true,
      "can_archive": true,
      "can_delete": true
    }
  },
  "meta": {
    "version": "string",
    "request_id": "string",
    "timestamp": "string"
  },
  "version_id": "string"
}
Empty
Empty
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}