Merran documentation API & integrations
Import a Merran export into the household
POST
/api/households/current/import
const url = 'http://localhost:3000/api/households/current/import';const options = { method: 'POST', headers: { cookie: 'merran.session_token=<merran.session_token>', 'Content-Type': 'application/zip' }, body: 'binary'};
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 \ --header 'Content-Type: application/zip' \ --cookie merran.session_token=<merran.session_token> \ --data binaryHousehold admins only. The body is the export’s zip. It’s checked, then imported in the background: follow the job at /households/current/jobs/{jobId}. Recipes already here, like from importing the same export twice, are skipped.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/zip
string format: binary
Responses
Section titled “Responses”Importing.
Media typeapplication/json
object
id
required
string
kind
required
What it does, like “household.import”.
string
status
required
string
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"}That isn’t a Merran export this Merran can read.
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 file is too big.
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.