Skip to content
merran
GitHubInstall

Merran documentation API & integrations

Import from a Mealie

POST
/api/households/current/import/mealie
curl --request POST \
--url http://localhost:3000/api/households/current/import/mealie \
--header 'Content-Type: application/json' \
--cookie merran.session_token=<merran.session_token> \
--data '{ "url": "http://192.168.1.20:9000", "token": "sample-mealie-api-token" }'

The server admin only. Imports every recipe in the Mealie, in the background: follow the job at /households/current/jobs/{jobId}. Recipes an earlier import brought in are skipped. The token is sealed while the import runs, and forgotten once it’s finished.

Media typeapplication/json
object
url
required
string format: uri
<= 2000 characters
token
required
string
>= 10 characters <= 4000 characters

Example

{
"url": "http://192.168.1.20:9000",
"token": "sample-mealie-api-token"
}

Importing.

Media typeapplication/json
object
id
required
string
kind
required

What it does, like “household.import”.

string
status
required
string
Allowed values: queued running done failed cancelled
scheduled
required

Whether it comes round on a schedule, like the nightly purge.

boolean
householdId
required
string | null
progress
required

How far it’s got, once it says.

object
done
required
number
total
required
number
result
required

What it did, once it’s done. A job followed item by item, like importing several links, says what it’s done so far as it goes.

object | null
error
required

Why it last failed.

string | null
attempts
required
number
maxAttempts
required
number
runAt
required

Not before then.

string format: date-time
startedAt
required
string | null format: date-time
finishedAt
required
string | null format: date-time
createdAt
required
string format: date-time

Example

{
"id": "0199e8b0-5a10-7a01-8b00-00000000000b",
"kind": "household.import",
"status": "running",
"scheduled": false,
"householdId": "0199e8b0-5a10-7a01-8b00-000000000003",
"progress": {
"done": 42,
"total": 128
},
"result": null,
"error": null,
"attempts": 1,
"maxAttempts": 3,
"runAt": "2026-10-15T18:30:00.000Z",
"startedAt": "2026-10-15T18:30:00.000Z",
"finishedAt": null,
"createdAt": "2026-10-15T18:30:00.000Z"
}

Mealie didn’t take the token.

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

Couldn’t reach Mealie, or it isn’t Mealie.

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.