Merran documentation API & integrations
What a recipe goes with
GET
/api/recipes/{recipe}/pairings
const url = 'http://localhost:3000/api/recipes/lemon-chicken/pairings';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/recipes/lemon-chicken/pairings \ --cookie merran.session_token=<merran.session_token>Recipes it pairs with, picked or by a whole tag, every recipe that adds up to, and the recipes it’s offered with. Recipes in Recently deleted are left out. With an API key, it needs the recipes: read permission.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”recipe
required
The recipe’s id, or its slug.
string
Example
lemon-chickenThe recipe’s id, or its slug.
Responses
Section titled “Responses”What it goes with.
Media typeapplication/json
object
pairings
required
What it goes with, as set.
Array
One of:
object
id
required
string
kind
required
string
recipe
required
object
id
required
string
slug
required
string
name
required
string
photo
required
Its card-sized photo, or null.
string | null
servings
required
number | null
totalMinutes
required
number | null
object
id
required
string
kind
required
string
tag
required
Every recipe with this tag.
string
options
required
Every recipe that adds up to: picked ones first, then tagged ones by name.
Array<object>
object
id
required
string
slug
required
string
name
required
string
photo
required
Its card-sized photo, or null.
string | null
servings
required
number | null
totalMinutes
required
number | null
pairsWith
required
Recipes it’s offered with: the other way round.
Array<object>
object
id
required
string
slug
required
string
name
required
string
photo
required
Its card-sized photo, or null.
string | null
servings
required
number | null
totalMinutes
required
number | null
Example
{ "pairings": [ { "id": "0199e8b0-5a10-7a01-8b00-00000000000e", "kind": "recipe", "recipe": { "id": "0199e8b0-5a10-7a01-8b00-000000000007", "slug": "garlic-rice", "name": "Garlic Rice", "photo": null, "servings": 4, "totalMinutes": 25 } }, { "id": "0199e8b0-5a10-7a01-8b00-00000000000f", "kind": "tag", "tag": "salad" } ], "options": [ { "id": "0199e8b0-5a10-7a01-8b00-000000000007", "slug": "garlic-rice", "name": "Garlic Rice", "photo": null, "servings": 4, "totalMinutes": 25 } ], "pairsWith": []}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 recipe.
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.