Skip to main content
POST
Upsert your user profile (call on first login)

Authorizations

Authorization
string
header
required

An aik_… programmatic API key (app.atako.ai → Settings → API keys) or a Supabase session JWT.

Body

application/json
name
string
required
Minimum string length: 1
company
string
phone
string
teamSize
enum<string>
Available options:
solo,
under_10,
under_50,
under_150,
under_300,
over_300
heardFrom
enum<string>

« How did you hear about us? » — stored on the company created by this call; ignored otherwise.

Available options:
search,
ai_assistant,
social,
email,
word_of_mouth,
event,
press,
ads,
other
timezone
string

IANA timezone.

locale
enum<string>

UI locale at signup. Applied on insert only — never overwrites an existing value.

Available options:
fr,
en,
de,
es,
it,
pt-BR,
nl,
pl,
sv,
da,
tr,
ja,
ko
acceptTerms
enum<boolean>

Terms checkbox ticked on /signup. Server stamps termsAcceptedAt and the currently published terms version (termsVersionId) — first acceptance only, never overwritten.

Available options:
true

Response

id
string<uuid>
required
name
string
required
email
string<email>
required
timezone
string
required

IANA timezone.

emailCanonical
string

Canonical form of email used for uniqueness and lookup (case-folded, +suffix stripped, Gmail dots removed). Not the deliverable address — email is.

phone
string | null

E.164.

companyId
string<uuid> | null
photo
string | null
locale
enum<string> | null

Preferred UI/email locale. NULL = no preference recorded yet.

Available options:
fr,
en,
de,
es,
it,
pt-BR,
nl,
pl,
sv,
da,
tr,
ja,
ko
banned
boolean
emailPrefs
object

Optional-email opt-outs (family → subscribed). An absent key means still subscribed.

onboardingEmailsSent
string[]
lastActiveAt
string<date-time> | null
npsTriggeredAt
string<date-time> | null
termsAcceptedAt
string<date-time> | null

First terms acceptance (signup checkbox).

termsVersionId
string<uuid> | null

Published terms version in force at acceptance (legal_document_versions).

tourSeenAt
string<date-time> | null

Guided tour finished or skipped. NULL = the web app opens it at next load (first login).

storeyToursSeen
object

Storey (dashboard | projects | floor | context) → when its guided tour was finished or skipped. A missing storey = its tour opens the first time the user reaches it.

createdAt
string<date-time>
updatedAt
string<date-time>