Merran documentation API & integrations
Followed recipe sites
const url = 'http://localhost:3000/api/sites';const options = { method: 'GET', headers: {cookie: 'merran.session_token=<merran.session_token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url http://localhost:3000/api/sites \ --cookie merran.session_token=<merran.session_token>The recipe sites the household follows, oldest followed first, each with its newest recipes; and suggested sites it doesn’t follow yet. Merran reads each site’s feed every few hours. With an API key, it needs the recipes: read permission.
Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”Its sites.
object
object
Its newest recipes, newest first: posts Merran opened and can import.
object
The recipe’s page, to import at POST /recipes/import.
The recipe’s own short description, when the site gives one.
What its site says it is, in Merran’s words; empty when it doesn’t say.
A small copy of its photo, through Merran.
The household’s recipe from it, if it has one.
object
False when it has a food the household avoids, or is off its diets.
New posts not opened yet: Merran opens them a few seconds apart.
Not read for the first time yet.
Why its feed couldn’t be read last time.
Sites that work well with Merran, not followed yet.
object
Follow it with this.
Example
{ "sites": [ { "id": "0199e8b0-5a10-7a01-8b00-000000000030", "name": "RecipeTin Eats", "url": "https://www.recipetineats.com/", "feedUrl": "https://www.recipetineats.com/feed/", "recipes": [ { "id": "0199e8b0-5a10-7a01-8b00-000000000031", "url": "https://www.recipetineats.com/honey-garlic-chicken/", "name": "Honey Garlic Chicken", "site": "RecipeTin Eats", "description": "Juicy chicken in a sticky honey garlic sauce, in 12 minutes.", "minutes": 12, "courses": [ "main" ], "photo": "/api/sites/recipes/0199e8b0-5a10-7a01-8b00-000000000031/photo", "publishedAt": "2026-10-01T17:30:00.000Z", "inLibrary": null, "suits": true }, { "id": "0199e8b0-5a10-7a01-8b00-000000000032", "url": "https://www.recipetineats.com/lemon-chicken/", "name": "Lemon Chicken", "site": "RecipeTin Eats", "description": null, "minutes": 35, "courses": [ "main" ], "photo": "/api/sites/recipes/0199e8b0-5a10-7a01-8b00-000000000031/photo", "publishedAt": "2026-10-01T17:30:00.000Z", "inLibrary": { "slug": "lemon-chicken", "name": "Lemon Chicken" }, "suits": true } ], "waiting": 3, "reading": false, "readAt": "2026-10-15T18:30:00.000Z", "error": null, "followedAt": "2026-10-01T17:30:00.000Z" } ], "suggestions": [ { "name": "Love and Lemons", "url": "https://www.loveandlemons.com/", "description": "Bright, seasonal vegetarian cooking." } ]}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." } }}© 2026 Kyle Johnson. Documentation: CC BY 4.0. Merran: AGPL-3.0-or-later.