Skip to content
merran
GitHubInstall

Merran documentation API & integrations

Follow a recipe site

POST
/api/sites
curl --request POST \
--url http://localhost:3000/api/sites \
--header 'Content-Type: application/json' \
--cookie merran.session_token=<merran.session_token> \
--data '{ "url": "https://www.loveandlemons.com/" }'

By any page of the site, its RSS or Atom feed, or a suggestion. Merran finds the feed and reads it straight away when no one’s read it lately, opening each new post a few seconds apart and keeping the recipes. With an API key, it needs the recipes: write permission.

Media typeapplication/json
object
url
required

Any page of the site, its feed, or a suggestion’s url.

string
>= 3 characters <= 500 characters

Example

{
"url": "https://www.loveandlemons.com/"
}

Following it.

Media typeapplication/json
object
id
required
string
name
required
string
url
required
string
feedUrl
required
string
recipes
required

Its newest recipes, newest first: posts Merran opened and can import.

Array<object>
object
id
required
string
url
required

The recipe’s page, to import at POST /recipes/import.

string
name
required
string
site
required
string
description
required

The recipe’s own short description, when the site gives one.

string | null
minutes
required
number | null
courses
required

What its site says it is, in Merran’s words; empty when it doesn’t say.

Array<string>
Allowed values: main side soup salad dessert baking breakfast snack drink sauce
photo
required

A small copy of its photo, through Merran.

string | null
publishedAt
required
string | null format: date-time
inLibrary
required

The household’s recipe from it, if it has one.

object
slug
required
string
name
required
string
suits
required

False when it has a food the household avoids, or is off its diets.

boolean
waiting
required

New posts not opened yet: Merran opens them a few seconds apart.

number
reading
required

Not read for the first time yet.

boolean
readAt
required
string | null format: date-time
error
required

Why its feed couldn’t be read last time.

string | null
followedAt
required
string format: date-time

Example

{
"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"
}

That isn’t a link Merran can fetch.

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 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."
}
}
}

The household follows it already.

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 feed was found, or recipe sites are off.

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.