Skip to content
merran
GitHubInstall

Merran documentation API & integrations

Put meals back as they were

POST
/api/plan/restore
curl --request POST \
--url http://localhost:3000/api/plan/restore \
--header 'Content-Type: application/json' \
--cookie merran.session_token=<merran.session_token> \
--data '{ "entries": [ { "id": "0199e8b0-5a10-7a01-8b00-00000000001b", "date": "2026-10-15", "anyDay": false, "meal": "dinner", "position": 0, "status": "planned", "recipe": "0199e8b0-5a10-7a01-8b00-000000000006", "withRecipe": "0199e8b0-5a10-7a01-8b00-000000000007", "note": null, "servings": null, "listedAt": null, "why": null, "cookedAt": null } ] }'

Undo: meals as other changes said they were. Ones taken off come back with the same id; ones changed go back to how they were. A meal whose recipe is gone is passed over. With an API key, it needs the plan: write permission.

Media typeapplication/json
object
entries
required
Array<object>
>= 1 items <= 500 items

A meal as it was, to put back with /plan/restore: what taking it off or changing it answers with.

object
id
required
string format: uuid
date
required
string
/^\d{4}-\d{2}-\d{2}$/

Example

2026-10-15
anyDay
required
boolean
meal
required
string
Allowed values: breakfast lunch dinner snack
position
required
integer
status
required
string
Allowed values: planned cooked skipped
recipe
required
string | null
withRecipe
required
string | null
note
required
string | null
<= 200 characters
servings
required
number | null
> 0 <= 1000
listedAt
required
string | null format: date-time
why
Array | null
<= 5 items
One of:
object
kind
required
string
Allowed values: theme
label
required
string
<= 60 characters
cookedAt

When it was marked cooked: put back cooked, its recipe and side were made then.

string | null format: date-time

Example

{
"id": "0199e8b0-5a10-7a01-8b00-00000000001b",
"date": "2026-10-15",
"anyDay": false,
"meal": "dinner",
"position": 0,
"status": "planned",
"recipe": "0199e8b0-5a10-7a01-8b00-000000000006",
"withRecipe": "0199e8b0-5a10-7a01-8b00-000000000007",
"note": null,
"servings": null,
"listedAt": null,
"why": null,
"cookedAt": null
}

Example

{
"entries": [
{
"id": "0199e8b0-5a10-7a01-8b00-00000000001b",
"date": "2026-10-15",
"anyDay": false,
"meal": "dinner",
"position": 0,
"status": "planned",
"recipe": "0199e8b0-5a10-7a01-8b00-000000000006",
"withRecipe": "0199e8b0-5a10-7a01-8b00-000000000007",
"note": null,
"servings": null,
"listedAt": null,
"why": null,
"cookedAt": null
}
]
}

As they were.

Media typeapplication/json
object
entries
required
Array<object>
object
id
required
string
date
required

Its day, or for the week’s pool, the week’s first day.

string
/^\d{4}-\d{2}-\d{2}$/
anyDay
required

In the week’s pool: for any day of the week.

boolean
meal
required
string
Allowed values: breakfast lunch dinner snack
position
required

Its place among the meal’s dishes.

integer
status
required
string
Allowed values: planned cooked skipped
recipe
required

Null for a note.

object
id
required
string
slug
required
string
name
required
string
photo
required
string | null
servings
required
number | null
totalMinutes
required
integer | null
calories
required

In a serving, when its nutrition is known.

number | null
withRecipe
required

What it’s made with: “with peanut sauce”.

object
id
required
string
slug
required
string
name
required
string
calories
required
number | null
note
required

A meal that isn’t a recipe: “leftovers”.

string | null
servings
required

Null for the recipe’s own servings.

number | null
why
required

Why it was picked, when Fill the week picked it: none otherwise.

Array
<= 5 items
One of:
object
kind
required
string
Allowed values: theme
label
required
string
<= 60 characters
createdAt
required
string format: date-time

Example

{
"entries": [
{
"id": "0199e8b0-5a10-7a01-8b00-00000000001b",
"date": "2026-10-15",
"anyDay": false,
"meal": "dinner",
"position": 0,
"status": "planned",
"recipe": {
"id": "0199e8b0-5a10-7a01-8b00-000000000006",
"slug": "lemon-chicken",
"name": "Lemon Chicken",
"photo": null,
"servings": 4,
"totalMinutes": 50,
"calories": 412
},
"withRecipe": {
"id": "0199e8b0-5a10-7a01-8b00-000000000007",
"slug": "garlic-rice",
"name": "Garlic Rice",
"calories": 210
},
"note": null,
"servings": null,
"why": [
{
"kind": "theme",
"label": "Taco night"
}
],
"createdAt": "2026-10-15T18:30:00.000Z"
}
]
}

Not signed in.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
fields
object
key
additional properties
string

Example

{
"error": {
"code": "not_found",
"message": "There's nothing here.",
"fields": {
"name": "Give it a name."
}
}
}

Not allowed.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
fields
object
key
additional properties
string

Example

{
"error": {
"code": "not_found",
"message": "There's nothing here.",
"fields": {
"name": "Give it a name."
}
}
}

© 2026 Kyle Johnson. Documentation: CC BY 4.0. Merran: AGPL-3.0-or-later.