Skip to content
merran
GitHubInstall

Merran documentation API & integrations

Change several things on the list at once

POST
/api/list/items/bulk
curl --request POST \
--url http://localhost:3000/api/list/items/bulk \
--header 'Content-Type: application/json' \
--cookie merran.session_token=<merran.session_token> \
--data '{ "ids": [ "0199e8b0-5a10-7a01-8b00-00000000001d", "0199e8b0-5a10-7a01-8b00-00000000001e" ], "action": "check" }'

Take them off, check them off or not, move them to an aisle or another list (remembered for each food), or buy them every week: all or none. The answer says what they were before, for Undo with /list/restore. Ids not on the list are passed over. With an API key, it needs the list: write permission.

Media typeapplication/json
object
ids
required
Array<string>
>= 1 items <= 500 items
action
required
string
Allowed values: remove check uncheck aisle move every-week
aisle

For aisle: the aisle’s id, or null for none.

string | null
list

For move: the list’s id.

string

Example

{
"ids": [
"0199e8b0-5a10-7a01-8b00-00000000001d",
"0199e8b0-5a10-7a01-8b00-00000000001e"
],
"action": "check"
}

Done.

Media typeapplication/json
object
changed
required
integer
before
required
Array<object>

An item as it was, to put it back (Undo).

object
id
required
string
list
required
string
name
required
string
>= 1 characters <= 200 characters
foodKey
required
string | null
<= 200 characters
quantity
required
number | null
unit
required
string | null
<= 40 characters
amountText
required
string | null
<= 60 characters
aisle
required
string | null
checked
required
boolean
source
required

How it got on the list: from the plan, typed in, every week, a usual buy, or the assistant.

string
Allowed values: plan typed every-week usual assistant
forMeals
required
Array<object> | null
<= 100 items
object
meal
required
string
quantity
required
number | null
unit
required
string | null
createdAt
required
string format: date-time

Example

{
"changed": 1,
"before": [
{
"id": "0199e8b0-5a10-7a01-8b00-00000000001d",
"list": "0199e8b0-5a10-7a01-8b00-00000000001c",
"name": "chicken thighs",
"foodKey": "chicken thigh",
"quantity": 3,
"unit": "pound",
"amountText": null,
"aisle": "0199e8b0-5a10-7a01-8b00-000000000021",
"checked": false,
"source": "plan",
"forMeals": [
{
"meal": "0199e8b0-5a10-7a01-8b00-00000000001b",
"quantity": 3,
"unit": "pound"
}
],
"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."
}
}
}

No such aisle or list.

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.