Merran documentation API & integrations
Import from a Mealie
const url = 'http://localhost:3000/api/households/current/import/mealie';const options = { method: 'POST', headers: { cookie: 'merran.session_token=<merran.session_token>', 'Content-Type': 'application/json' }, body: '{"url":"http://192.168.1.20:9000","token":"sample-mealie-api-token"}'};
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/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.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Example
{ "url": "http://192.168.1.20:9000", "token": "sample-mealie-api-token"}Responses
Section titled “Responses”Importing.
object
What it does, like “household.import”.
Whether it comes round on a schedule, like the nightly purge.
How far it’s got, once it says.
object
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.
Why it last failed.
Not before then.
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.
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." } }}Couldn’t reach Mealie, or it isn’t Mealie.
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.