---
title: "Update one owned recipe spoon cook event"
method: PATCH
path: "/api/v1/recipes/{id}/spoons/{spoonId}"
tags: ["Recipe Spoons"]
---

# Update one owned recipe spoon cook event

`PATCH /api/v1/recipes/{id}/spoons/{spoonId}`

## Request

- Base URL: `https://spoonjoy.app`
- URL: `https://spoonjoy.app/api/v1/recipes/{id}/spoons/{spoonId}`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__session`
  - OAuth 2 (authorization code, authorization URL `https://spoonjoy.app/oauth/authorize`, token URL `https://spoonjoy.app/oauth/token`, scopes: `kitchen:write`)

## Path parameters

- `id` string, required
- `spoonId` string, required

## Headers

- `X-Request-Id` string

## Request body

- UpdateRecipeSpoonRequest
  - `clientMutationId` string, required
  - `note` string, nullable
  - `nextTime` string, nullable
  - `cookedAt` string, date-time
  - `photoUrl` string, nullable

## Response `200`

Success

- UpdateRecipeSpoonEnvelope
  - `ok` unknown, required
  - `requestId` string, required
  - `data` RecipeSpoonMutationData, required
    - `spoon` RecipeSpoon, required
      - `id` string, required
      - `chefId` string, required
      - `recipeId` string, required
      - `cookedAt` string, date-time, required
      - `photoUrl` string, uri, nullable, required
      - `note` string, nullable, required
      - `nextTime` string, nullable, required
      - `deletedAt` string, date-time, nullable, required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
      - `chef` ChefSummary, required
        - `id` string, required
        - `username` string, required
        - `photoUrl` string, uri, nullable
    - `isOriginCook` boolean
    - `activeCover` RecipeCover
      - `id` string, required
      - `recipeId` string, required
      - `status` 'processing' | 'ready' | 'failed' | 'archived', required
      - `sourceType` 'ai-placeholder' | 'chef-upload' | 'import' | 'spoon', required
      - `imageUrl` string, uri, nullable, required
      - `stylizedImageUrl` string, uri, nullable, required
      - `displayUrl` string, uri, nullable, required
      - `activeVariant` 'image' | 'stylized' | 'null', nullable, required: Active cover variant: image is verbatim/pure AI/imported display; stylized is an editorialized chef photo. Null when no active cover is available.
      - `provenanceLabel` string, nullable, required
      - `sourceSpoonId` string, nullable
      - `createdById` string, nullable
      - `archivedAt` string, date-time, nullable, required
      - `generationStatus` 'none' | 'processing' | 'succeeded' | 'failed', required
      - `failureReason` string, nullable
      - `sourceImageUrl` string, uri, nullable, required
      - `createdAt` string, date-time, required
    - `previousActiveCover` RecipeCover
      - `id` string, required
      - `recipeId` string, required
      - `status` 'processing' | 'ready' | 'failed' | 'archived', required
      - `sourceType` 'ai-placeholder' | 'chef-upload' | 'import' | 'spoon', required
      - `imageUrl` string, uri, nullable, required
      - `stylizedImageUrl` string, uri, nullable, required
      - `displayUrl` string, uri, nullable, required
      - `activeVariant` 'image' | 'stylized' | 'null', nullable, required: Active cover variant: image is verbatim/pure AI/imported display; stylized is an editorialized chef photo. Null when no active cover is available.
      - `provenanceLabel` string, nullable, required
      - `sourceSpoonId` string, nullable
      - `createdById` string, nullable
      - `archivedAt` string, date-time, nullable, required
      - `generationStatus` 'none' | 'processing' | 'succeeded' | 'failed', required
      - `failureReason` string, nullable
      - `sourceImageUrl` string, uri, nullable, required
      - `createdAt` string, date-time, required
    - `createdCover` RecipeCover
      - `id` string, required
      - `recipeId` string, required
      - `status` 'processing' | 'ready' | 'failed' | 'archived', required
      - `sourceType` 'ai-placeholder' | 'chef-upload' | 'import' | 'spoon', required
      - `imageUrl` string, uri, nullable, required
      - `stylizedImageUrl` string, uri, nullable, required
      - `displayUrl` string, uri, nullable, required
      - `activeVariant` 'image' | 'stylized' | 'null', nullable, required: Active cover variant: image is verbatim/pure AI/imported display; stylized is an editorialized chef photo. Null when no active cover is available.
      - `provenanceLabel` string, nullable, required
      - `sourceSpoonId` string, nullable
      - `createdById` string, nullable
      - `archivedAt` string, date-time, nullable, required
      - `generationStatus` 'none' | 'processing' | 'succeeded' | 'failed', required
      - `failureReason` string, nullable
      - `sourceImageUrl` string, uri, nullable, required
      - `createdAt` string, date-time, required
    - `generationStatus` string, nullable
    - `removed` boolean
    - `mutation` MutationMetadata, required
      - `clientMutationId` string, required
      - `replayed` boolean, required

## Other responses

- `400`: Errors: invalid_json, validation_error
- `401`: Errors: authentication_required, invalid_token
- `403`: Errors: insufficient_scope
- `404`: Errors: not_found
- `405`: Errors: method_not_allowed
- `409`: Errors: idempotency_conflict, idempotency_in_progress
- `429`: Errors: rate_limited
- `500`: Errors: internal_error
- `503`: Errors: temporarily_unavailable

---

[API](https://skmtc.dev/spoonjoy/apis/spoonjoy-api.md) · [All operations](https://skmtc.dev/spoonjoy/apis/spoonjoy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/spoonjoy/apis/spoonjoy-api/revisions/b96eb5d4697d?raw)
