Merran documentation API & integrations
Change the server's settings
const url = 'http://localhost:3000/api/settings/server';const options = { method: 'PATCH', headers: { cookie: 'merran.session_token=<merran.session_token>', 'Content-Type': 'application/json' }, body: '{"errorTracking.environment":"home","errorTracking.dsn":null}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url http://localhost:3000/api/settings/server \ --header 'Content-Type: application/json' \ --cookie merran.session_token=<merran.session_token> \ --data '{ "errorTracking.environment": "home", "errorTracking.dsn": null }'Server admins only. Send only what changes. Nothing is saved if anything is wrong, and settings from environment variables can’t be changed.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”New values by key. Null puts a setting back to its default, and deletes a secret.
object
Example
{ "errorTracking.environment": "home", "errorTracking.dsn": null}Responses
Section titled “Responses”Saved.
object
object
object
Its value, or null for a secret or a setting that isn’t set.
The environment variable that sets it, which means it can’t be changed here.
object
Its last four characters, when it’s long enough.
Sealed with another master key, so it needs entering again.
Video import’s tools, by their versions, or null when they aren’t there; and whether there’s a cookies.txt for sites that want a signed-in session.
object
The recipe sites Merran reads, the recipes it has from them, how many of the starter collections’ classics open, and when a site was last read.
object
object
The redirect address to give the Kroger developer app: null without a public address set, when it’s this server’s address and /api/stores/kroger/callback.
object
Example
{ "about": { "version": "0.1.0", "installMethod": "docker", "database": "sqlite", "publicUrl": "https://merran.example.com" }, "settings": [ { "key": "errorTracking.environment", "kind": "text", "value": "home", "default": "production", "source": "saved", "lockedBy": null }, { "key": "errorTracking.dsn", "kind": "secret", "value": null, "default": null, "source": "environment", "lockedBy": "MERRAN_SENTRY_DSN", "secret": { "set": true, "hint": "4f2a", "unreadable": false } } ], "video": { "ytDlp": "2026.08.19", "ffmpeg": "8.0", "cookies": false }, "sites": { "sites": 12, "recipes": 214, "classics": { "working": 71, "all": 73 }, "readAt": "2026-10-15T18:30:00.000Z" }, "kroger": { "redirectUri": "https://merran.example.com/api/stores/kroger/callback" }}Something isn’t right, field by field.
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." } }}© 2026 Kyle Johnson. Documentation: CC BY 4.0. Merran: AGPL-3.0-or-later.