Skip to content
merran
GitHubInstall

Merran documentation API & integrations

Import a Merran export as a new household

POST
/api/households/import
curl --request POST \
--url http://localhost:3000/api/households/import \
--header 'Content-Type: application/zip' \
--cookie merran.session_token=<merran.session_token> \
--data binary

Server admins only, as for starting any household. The body is the export’s zip. A household is made with the export’s name and details, you become its owner, and it becomes the one in use on this device; its recipes are imported in the background: follow the job at /households/current/jobs/{jobId}.

Media typeapplication/zip
string format: binary

Made, and importing.

Media typeapplication/json
object
household
required
object
id
required
string
name
required
string
country
required
string | null
currency
required
string | null
timeZone
required
string
weekStartsOn
required
integer
meals
required

The meals filled for it (by Fill the week and Plan each week), in a day’s order: every meal until it opts out of some. Any meal can be planned by hand.

Array<string>
Allowed values: breakfast lunch dinner snack
role
required
string
Allowed values: owner admin member
job
required
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

{
"household": {
"id": "0199e8b0-5a10-7a01-8b00-000000000003",
"name": "The Riveras",
"country": "US",
"currency": "USD",
"timeZone": "America/Phoenix",
"weekStartsOn": 0,
"meals": [
"dinner"
],
"role": "owner"
},
"job": {
"id": "0199e8b0-5a10-7a01-8b00-00000000000b",
"kind": "household.import",
"status": "queued",
"scheduled": false,
"householdId": "0199e8b0-5a10-7a01-8b00-000000000003",
"progress": null,
"result": null,
"error": null,
"attempts": 0,
"maxAttempts": 3,
"runAt": "2026-10-15T18:30:00.000Z",
"startedAt": null,
"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.