Skip to content
GET /user/me

The profile of whoever the credential belongs to, plus one entry per organization they are an active member of, each carrying that org's roles, teams and effective permissions. Call this first: it is how a client learns which organization ids it may put in `X-Organization-Id` and which actions to offer. With an org API token this still returns the token owner's memberships, so read `organizations` rather than assuming the token's org is the only one.

Response Body

avatar_urlstring,null
created_atstring · date-time
emailstring · email
idstring

User id (usr_…).

identitiesobject[]

Login identities linked to this account.

connected_atstring · date-time
providerstring

e.g. google, email_code, invite, or an SSO connection.

is_activeboolean

Inactive accounts cannot authenticate at all.

is_root_org_staffboolean

Platform staff who are also a member of the root organization — gates the staff console.

is_staffboolean

Platform staff flag. Unrelated to organization roles.

last_login_atstring,null · date-time
mfa_enabledboolean

True when TOTP is active on this account.

namestring,null
organizationsobject[]

One entry per active membership. Organizations where membership has lapsed are omitted.

memberobject

Membership facts only — roles and teams are the sibling fields below, not nested here.

4 properties
joined_atstring · date-time
statusstring
user_idstring

User id (usr_…).

viastring,null

How they joined, e.g. invite or verified domain.

organizationobject
15 properties
can_deleteboolean

Whether the CALLER may delete this organization — the org:delete permission, which only the Org Owner role holds, and never for the platform root organization. Server-computed: branch on this rather than inspecting roles. Always false where the response has no member context to compute it from — the org switcher list GET /organization (one member-context lookup per row would be a per-row round trip), the staff console, and the invite-accept response. It never overstates: trust it when true, and read GET /user/me or GET /organization/{id} (both of which compute it) when you need it for a list row.

can_restoreboolean

Whether the CALLER may cancel a scheduled deletion: the org:manage permission, and only while purge_after is still ahead. Server-computed, like can_delete, and false for the same reasons — no member context (the org switcher list, the staff console) — plus once the window has closed. Read purge_after to tell "too late" from "not yours to undo".

created_atstring · date-time
deletion_scheduled_atstring,null · date-time

Set when a deletion has been scheduled (DELETE /organization/{id}). The organization is read-only until purge_after. Null otherwise.

idstring

Organization id (org_…) — the value for X-Organization-Id.

logostring,null · uri

Public URL of the logo image, or null.

namestring
planstring

The stored plan: gold, black, or none when locked. This is not the same as the effective entitlement — read GET /organization/{id}/entitlements before gating a feature on it.

purge_afterstring,null · date-time

When a scheduled deletion becomes permanent — 30 days after deletion_scheduled_at. Null unless scheduled.

regionstring,null

Data location fixed at creation: us/eu pin a hard jurisdiction, apac is a placement hint.

settingsRecord<string, any>

Free-form org settings. PATCH /organization/{id} REPLACES this object wholesale.

slugstring

Immutable after creation.

trial_ends_atstring,null · date-time
trial_indefinite_atstring,null · date-time

When staff granted an indefinite trial, or null. Unlocked with no end date: no countdown, no expiry email, billing still reachable.

updated_atstring · date-time
permissionsstring[]

Effective permission names, unioned across roles. This is the authoritative list for deciding what to show; the server re-checks it on every request.

rolesobject[]

Role summaries held in this organization.

4 properties
idstring

Role id (role_…).

is_systemboolean
namestring
seat_classstring
Possible values:
billablefree_admin
teamsobject[]
2 properties
idstring

Team id (team_…).

namestring
updated_atstring · date-time
curl -X GET 'https://api.elaichi.ai/user/me' \
  -H 'Authorization: Bearer $ELAICHI_API_TOKEN' \
  -H 'Content-Type: application/json'
const response = await fetch('https://api.elaichi.ai/user/me', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + process.env.ELAICHI_API_TOKEN,
    'Content-Type': 'application/json',
  },
});

const data = await response.json();
console.log(data);
import os
import requests

url = "https://api.elaichi.ai/user/me"
headers = {
    "Authorization": f"Bearer {os.environ['ELAICHI_API_TOKEN']}",
    "Content-Type": "application/json",
}

response = requests.get(url, headers=headers)
print(response.json())