Merran documentation API & integrations
What changes, as it happens
GET
/api/events
const url = 'http://localhost:3000/api/events?page=list';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/events?page=list' \ --cookie merran.session_token=<merran.session_token>Server-sent events for the household, for as long as the connection stays open:
readywhen it’s open, with the areas it hears about.plan,list,pantry,recipesorhouseholdwhen something there changes, with who changed it (by). Fetch the area again to see what.presencewith who haspageopen, when someone opens or leaves it.pingnow and then, to keep the connection open.
A device that sends the same client with its own changes (in the X-Merran-Client header) isn’t told about them; your other devices are. An API key hears about the areas it can read. With an API key, it needs the any: read permission.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”page
The page open, to say who else has it open.
string
The page open, to say who else has it open.
client
This device’s id, as sent with its changes.
string
This device’s id, as sent with its changes.
Responses
Section titled “Responses”The events, until the connection closes.
Media typetext/event-stream
string
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." } }}© 2026 Kyle Johnson. Documentation: CC BY 4.0. Merran: AGPL-3.0-or-later.