Merran documentation API & integrations
Say how cooking a recipe went
const url = 'http://localhost:3000/api/recipes/lemon-chicken/cook-notes';const options = { method: 'POST', headers: { cookie: 'merran.session_token=<merran.session_token>', 'Content-Type': 'application/json' }, body: '{"rating":5,"note":"More lemon next time."}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:3000/api/recipes/lemon-chicken/cook-notes \ --header 'Content-Type: application/json' \ --cookie merran.session_token=<merran.session_token> \ --data '{ "rating": 5, "note": "More lemon next time." }'Stars, a note for next time, or both. The stars become the recipe’s rating, without keeping a version. With AI for cooking notes, a note is turned into a suggested change to the recipe in the background, waiting in the Review queue; suggesting says so. An opinion (“the kids loved it”) is just kept. With an API key, it needs the recipes: write permission.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The recipe’s id, or its slug.
Example
lemon-chickenThe recipe’s id, or its slug.
Request Bodyrequired
Section titled “Request Bodyrequired”object
1 to 5 stars. They become the recipe’s rating.
Anything to change next time.
Example
{ "rating": 5, "note": "More lemon next time."}Responses
Section titled “Responses”Saved.
object
1 to 5 stars.
For next time.
Who cooked it, if they’re still here.
Its note is being turned into a suggested change to the recipe, which will wait in the Review queue.
Example
{ "id": "0199e8b0-5a10-7a01-8b00-00000000000c", "rating": 5, "note": "More lemon next time.", "by": "Sam Rivera", "createdAt": "2026-10-09T01:15:00.000Z", "suggesting": true}Neither stars nor a note, or something else is off.
object
object
object
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}Not signed in.
object
object
object
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}Not allowed.
object
object
object
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}No such recipe.
object
object
object
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.