Account API
Settings, onboarding and the activity log. 7 ops: get_organization, update_organization, list_activity, get_onboarding, get_referral_stats, get_profile, update_profile.
Settings, onboarding and the activity log.
get_organization
readGet organization · POST /api/v1/get_organization · scope organization:read or GET …?input=
The organization this credential acts in (a person's own diary is their personal organization): id, slug, name, timezone (the diary day boundary) and language, and the caller's role. Call first to orient yourself; get_account adds the plan and usage.
curl -X POST https://getgutlog.com/api/v1/get_organization \ -H "Authorization: Bearer gutlog_…"npx @meterapp/gutlog get_organization{
"type": "object",
"properties": {}
}Update organization · POST /api/v1/update_organization · scope organization:write
Change the organization's name, default timezone (IANA, e.g. Europe/Madrid: where a diary day starts and ends, reminder times) or default language (BCP 47: emails and reports). Owners and admins.
curl -X POST https://getgutlog.com/api/v1/update_organization \ -H "Authorization: Bearer gutlog_…"npx @meterapp/gutlog update_organization{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"timezone": {
"type": "string",
"maxLength": 64
},
"default_locale": {
"type": "string",
"minLength": 2,
"maxLength": 35
}
}
}list_activity
readList activity · POST /api/v1/list_activity · scope organization:read or GET …?input=
Every change made through the platform, newest first: who (a person, an API key, an AI agent, a worker), from which surface (dashboard, api, mcp, cli, worker, ai) and what. The audit log (list_audit_log) has the sensitive changes with their details.
curl -X POST https://getgutlog.com/api/v1/list_activity \ -H "Authorization: Bearer gutlog_…"npx @meterapp/gutlog list_activity{
"type": "object",
"properties": {
"limit": {
"default": 50,
"description": "Page size, at most 200.",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"default": 0,
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
}
}get_onboarding
readGet onboarding checklist · POST /api/v1/get_onboarding · scope organization:read or GET …?input=
The person's setup checklist, in order: connect their AI assistant (MCP), log a first meal, scan a barcode, log symptoms, start an elimination program. Each step has done, a one-line how-to for an agent (which op or command does it) and the dashboard path. Use it to tell a person what to do next in Gutlog.
curl -X POST https://getgutlog.com/api/v1/get_onboarding \ -H "Authorization: Bearer gutlog_…"npx @meterapp/gutlog get_onboarding{
"type": "object",
"properties": {}
}Acquisition by channel (staff) · POST /api/v1/get_referral_stats · scope organization:read or GET …?input=
Gutlog team only. Signups and paying organizations by first-touch acquisition channel, in total and for organizations created within the last `days`. Channels: `ref:<slug>` (a link we published with ?ref=, docs/attribution.md), `utm:<source>/<medium>`, `ai` (ChatGPT, Claude, Gemini, Perplexity, Copilot), `search`, `social`, `referral:<host>`, `direct` (landed with no referrer, ref or utm) and `unknown` (opted out with DNT/GPC, signed up on another device, or before attribution existed). Paying means a live subscription on a paid plan. Also returns `refs` (signups per ?ref= slug) and `sources` (per ref, utm_source and utm_medium). Reads every organization (the only cross-organization read besides the feedback board), returns counts only, never organization names.
curl -X POST https://getgutlog.com/api/v1/get_referral_stats \ -H "Authorization: Bearer gutlog_…"npx @meterapp/gutlog get_referral_stats{
"type": "object",
"properties": {
"days": {
"default": 30,
"description": "Window for the *_since counts. Default 30.",
"type": "integer",
"minimum": 1,
"maximum": 3650
}
}
}get_profile
readGet my profile · POST /api/v1/get_profile · scope organization:read or GET …?input=
Your own settings, the same in every organization: `locale`, the language the dashboard and every email to you are written in (one of en), or null when you never chose one (the dashboard then follows the browser, emails are English). With an API key, the key creator's profile.
curl -X POST https://getgutlog.com/api/v1/get_profile \ -H "Authorization: Bearer gutlog_…"npx @meterapp/gutlog get_profile{
"type": "object",
"properties": {}
}update_profile
writeUpdate my profile · POST /api/v1/update_profile · scope organization:write
Changes your own settings: `locale` (en) is the language of the dashboard and of every email Gutlog sends you; null forgets it. The dashboard's language picker calls this. Returns the profile.
curl -X POST https://getgutlog.com/api/v1/update_profile \ -H "Authorization: Bearer gutlog_…" \ -H "Content-Type: application/json" \ -d '{"locale":"en"}'npx @meterapp/gutlog update_profile --json '{"locale":"en"}'{
"type": "object",
"properties": {
"locale": {
"anyOf": [
{
"type": "string",
"enum": [
"en"
]
},
{
"type": "null"
}
],
"description": "Your language: en, or null for none."
}
},
"required": [
"locale"
]
}