Merran documentation API & integrations
Note an AI key's credit
const url = 'http://localhost:3000/api/households/current/ai/keys/example/credit';const options = { method: 'PUT', headers: { cookie: 'merran.session_token=<merran.session_token>', 'Content-Type': 'application/json' }, body: '{"amount":20}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url http://localhost:3000/api/households/current/ai/keys/example/credit \ --header 'Content-Type: application/json' \ --cookie merran.session_token=<merran.session_token> \ --data '{ "amount": 20 }'Household admins only. The credit on the key now, as its provider’s dashboard says: the providers don’t tell a key, so Merran counts what it spends from here and warns when about a fifth is left. Entering it also tries the key again if it ran out. Null stops counting.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”object
The credit on the key now, in US dollars; null to stop counting.
Example
{ "amount": 20}Responses
Section titled “Responses”Noted.
object
Its id; “env:anthropic” and the like for a key set in the server’s environment.
An address’s name.
An OpenAI-compatible address.
The key’s last four characters. The key itself is never sent.
What it can use, from its last test.
Set in the server’s environment, so it can’t be changed here.
Sealed with a master key the server no longer has: take it off and add it again.
The providers don’t tell a key how much credit it has left, so it’s what someone entered, less what Merran’s spent on it since. None until entered.
object
The credit entered, in US dollars.
When it was entered.
What Merran has spent on the key since.
About what’s left. Use of the key outside Merran isn’t counted.
When its provider last said it’s out of credit. It’s passed over for an hour, then tried again; it clears once it works.
About a fifth or less of its entered credit left.
Only from adding or testing a key: whether one tiny call on its cheapest model found credit (ok), none (out), or couldn’t tell (failed, with the provider’s words). Addresses aren’t checked.
object
Example
{ "id": "0199e8b0-5a10-7a01-8b00-000000000028", "provider": "anthropic", "name": null, "baseUrl": null, "hint": "7xQa", "models": [ "claude-haiku-5-5", "claude-opus-5-5" ], "testedAt": "2026-10-16T17:00:00.000Z", "fromEnvironment": false, "unreadable": false, "credit": { "amount": 20, "since": "2026-10-01T17:00:00.000Z", "spent": 16.6, "left": 3.4 }, "outOfCreditAt": null, "lowOnCredit": true}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." } }}No such key.
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.