OpenAssistantAPI

Organization API

Users

Provision, deprovision, and list users

GET/users/me

Get current user profile

Responses

200Current user
ok reqenumtrue
user reqobject
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersobject
levelenumall-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
401Unauthorized
status reqinteger
error_codestring
error reqstring

Request

curl 'https://app.openassistant.us/api/users/me' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "user": {
    "id": "string",
    "account": "string",
    "assistant": "string",
    "name": "string",
    "avatarUrl": "https://example.com",
    "timezone": "string"
  }
}
PATCH/users/me

Update current user profile

Request body

firstNamestring
lastNamestring
timezonestring
localestring
citystring
countrystring | null
avatarstring
assistantstring | null
voiceobject | null
voiceIdstring
providerstring
coordinatorEnabledboolean

Responses

200Updated user
ok reqenumtrue
user reqobject
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersobject
levelenumall-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring

Request

curl 'https://app.openassistant.us/api/users/me' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "firstName": "string",
  "lastName": "string",
  "timezone": "string",
  "locale": "string"
}'

Response

{
  "ok": true,
  "user": {
    "id": "string",
    "account": "string",
    "assistant": "string",
    "name": "string",
    "avatarUrl": "https://example.com",
    "timezone": "string"
  }
}
GET/users

List users in account

Query parameters

pageinteger
perPageinteger
limitinteger
statusstring
emailstring
externalIdstring
organizationIdstring
searchstring

Responses

200Paginated user list
ok reqenumtrue
users reqobject[]
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersany...
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
pageinteger
perPageinteger
totalinteger

Request

curl 'https://app.openassistant.us/api/users' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "users": [
    {
      "id": "string",
      "account": "string",
      "assistant": "string",
      "name": "string",
      "avatarUrl": "https://example.com",
      "timezone": "string"
    }
  ]
}
POST/users

Create a new user

Request body

email reqstring
namestring
firstNamestring
lastNamestring
avatarstring
timezonestring
localestring
externalIdstring
assistantEmailstring
metadataobject

Responses

201Created user
ok reqenumtrue
user reqobject
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersobject
levelenumall-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
400Bad request
status reqinteger
error_codestring
error reqstring

Request

curl 'https://app.openassistant.us/api/users' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "email": "[email protected]"
}'

Response

{
  "ok": true,
  "user": {
    "id": "string",
    "account": "string",
    "assistant": "string",
    "name": "string",
    "avatarUrl": "https://example.com",
    "timezone": "string"
  }
}
GET/users/{userId}

Get user detail with identifiers, contacts, and memories

Path parameters

userId reqstring

Responses

200User detail
ok reqenumtrue
user reqobject
idstring
accountstring
emailstring
externalIdstring
assistantstring | null
namestring | null
firstNamestring
lastNamestring
avatarUrlstring | null
timezonestring
localestring
countrystring | null
citystring
organizationstring | null
organizationRoleenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
teamobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRoleenummemberadminownernull
statusenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersany...
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAtstring
updatedAtstring
404Not found
status reqinteger
error_codestring
error reqstring

Request

curl 'https://app.openassistant.us/api/users/<userId>' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "user": {
    "id": "string",
    "account": "string",
    "assistant": "string",
    "name": "string",
    "avatarUrl": "https://example.com",
    "timezone": "string",
    "identifiers": [
      {
        "id": null,
        "type": null,
        "value": null,
        "verified": null,
        "primary": null,
        "createdAt": null
      }
    ],
    "contacts": [
      {}
    ],
    "memories": [
      {}
    ]
  }
}
PUT/users/{userId}

Update a user

Update user fields including `organizationRole`. When called with portal or org-scoped credentials, the target user must belong to the same organization — cross-org role changes return 403.

Path parameters

userId reqstring

Request body

namestring
firstNamestring
lastNamestring
avatarstring
timezonestring
localestring
statusenumactiveinactivesuspended
externalIdstring
assistantEmailstring | null
organizationstring | null
organizationRoleenumadminmemberguest
managerRolesstring[]
metadataobject

Responses

200Updated user
ok reqenumtrue
user reqobject
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersobject
levelenumall-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
403User does not belong to your organization

Request

curl 'https://app.openassistant.us/api/users/<userId>' \
  -X PUT \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "firstName": "string",
  "lastName": "string",
  "avatar": "string"
}'

Response

{
  "ok": true,
  "user": {
    "id": "string",
    "account": "string",
    "assistant": "string",
    "name": "string",
    "avatarUrl": "https://example.com",
    "timezone": "string"
  }
}
DELETE/users/{userId}

Delete a user

Path parameters

userId reqstring

Responses

200Deleted
ok reqenumtrue
user reqobject
id reqstring
deletedboolean
messagestring

Request

curl 'https://app.openassistant.us/api/users/<userId>' \
  -X DELETE \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "user": {
    "id": "string"
  }
}
PATCH/users/{userId}/assistant

Set the principal's assistant pointer

Writes `User.assistant` (spec §2.5.2.1). Allowed only when the caller is the user themselves, or when the user is unregistered (ghost principal). The assistant must be visible to the caller via the existing assistant visibility filter; otherwise returns 403 `AGNT_E_ASSISTANT_NOT_VISIBLE`.

Path parameters

userId reqstring

Request body

assistant reqstring | null

Responses

200Updated user
ok reqenumtrue
user reqobject
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersobject
levelenumall-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
403Forbidden (assistant not visible, or not authorized to set)
status reqinteger
error_codestring
error reqstring
404User not found
status reqinteger
error_codestring
error reqstring

Request

curl 'https://app.openassistant.us/api/users/<userId>/assistant' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "assistant": "507f1f77bcf86cd799439011"
}'

Response

{
  "ok": true,
  "user": {
    "id": "string",
    "account": "string",
    "assistant": "string",
    "name": "string",
    "avatarUrl": "https://example.com",
    "timezone": "string"
  }
}
POST/users/provision

Provision (find-or-create) a user by email

Request body

idstring
email reqstring
teamIdstring
firstNamestring
lastNamestring

Responses

200Existing user
ok reqenumtrue
user reqobject
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersobject
levelenumall-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
teamId reqstring
created reqbooleanTrue when a new user account was created (vs. an existing user found).
addedToTeam reqbooleanTrue when this call created a new team membership for the user.
alreadyMember reqbooleanTrue when nothing changed — the user and their team membership both already existed. Callers can surface an "already a member" message.
joinSkipped reqbooleanTrue when the user/org was provisioned but the team join was skipped because the user already owns a different team with other active members and no automatic conflict resolution was possible. Needs manual reconciliation (ownership transfer).
201Created user
ok reqenumtrue
user reqobject
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
managerRolesstring[]
coordinatorEnabledboolean
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
unreadInboxCountnumber
notificationPromptDismissedboolean
metadataobject
firstLoginAtstring
usernamestring | null
referralCodestring | null
preferencesobject
routingOverridesany[]
remindersobject
levelenumall-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
teamId reqstring
created reqbooleanTrue when a new user account was created (vs. an existing user found).
addedToTeam reqbooleanTrue when this call created a new team membership for the user.
alreadyMember reqbooleanTrue when nothing changed — the user and their team membership both already existed. Callers can surface an "already a member" message.
joinSkipped reqbooleanTrue when the user/org was provisioned but the team join was skipped because the user already owns a different team with other active members and no automatic conflict resolution was possible. Needs manual reconciliation (ownership transfer).

Request

curl 'https://app.openassistant.us/api/users/provision' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "email": "[email protected]"
}'

Response

{
  "ok": true,
  "user": {
    "id": "string",
    "account": "string",
    "assistant": "string",
    "name": "string",
    "avatarUrl": "https://example.com",
    "timezone": "string"
  },
  "teamId": "string",
  "created": true,
  "addedToTeam": true,
  "alreadyMember": true
}
GET/workspace/profile

Get workspace usage profile for the current user

Responses

200Workspace profile
ok reqenumtrue
profile reqobject | null
userId reqstring
accountId reqstring
updatedAt reqstring | null
lastActiveAt reqstring | null
peakMemoryBytes reqnumber
avgMemoryBytes reqnumber
currentDiskBytes reqnumber
diskQuotaBytes reqnumber
avgCpuLoadAvg reqnumber
totalActiveMinutes reqnumber
topMcpSlugs reqstring[]
memoryLimitBytes reqnumber | null

Request

curl 'https://app.openassistant.us/api/workspace/profile' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "profile": {
    "userId": "507f1f77bcf86cd799439011",
    "accountId": "507f1f77bcf86cd799439011",
    "updatedAt": "2025-01-15T10:30:00.000Z",
    "lastActiveAt": "2025-01-15T10:30:00.000Z",
    "peakMemoryBytes": 0,
    "avgMemoryBytes": 0
  }
}
GET/workspace/snapshots

Get recent workspace usage snapshots for charting

Query parameters

limitstring

Responses

200Snapshots (chronological)
ok reqenumtrue
snapshots reqobject[]
userId reqstring
timestamp reqstring
memoryUsedBytes reqnumber | null
memoryTotalBytes reqnumber | null
diskUsedBytes reqnumber | null
diskQuotaBytes reqnumber | null
cpuLoadAvg reqnumber | null
activeMcpSlugs reqstring[]
containerUptime reqnumber | null
pageinteger
perPageinteger
totalinteger

Request

curl 'https://app.openassistant.us/api/workspace/snapshots' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "snapshots": [
    {
      "userId": "507f1f77bcf86cd799439011",
      "timestamp": "2025-01-15T10:30:00.000Z",
      "memoryUsedBytes": 0,
      "memoryTotalBytes": 0,
      "diskUsedBytes": 0,
      "diskQuotaBytes": 0
    }
  ]
}
POST/workspace/cleanup

Clear workspace caches (browser downloads, npm cache, /tmp)

Responses

200Cleanup result
ok reqboolean
freedNotestring

Request

curl 'https://app.openassistant.us/api/workspace/cleanup' \
  -X POST \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true
}
POST/users/deprovision

Deprovision a user by email

Request body

email reqstring
teamId reqstring

Responses

200Result
ok reqenumtrue
deleted reqboolean
userDeletedboolean
userIdstring
messagestring

Request

curl 'https://app.openassistant.us/api/users/deprovision' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "email": "[email protected]",
  "teamId": "string"
}'

Response

{
  "ok": true,
  "deleted": true
}
GET/me/profile

Get the current user's layered profile (professional + personal + primePrefs), identifiers, and audit log

Responses

200Layered profile
ok reqenumtrue
profile reqobject
professionalobject
rolestring
companyIdstring | null
companyDisplayNamestring | null
departmentstring
startDatestring
officeLocationstring
workHoursobject
startstring
endstring
daysstring[]
pronounsstring
linkedinUrlstring
biostring
responsibilitiesstring[]
currentProjectsstring[]
managerIdstring | null
reportsstring[]
languagesstring[]
commsStylestring
personalobject
birthdaystring
nicknamesstring[]
genderenummalefemaleother
travelSchedulestring
linksobject[]
typestring
urlstring
socialsobject
twitterstring
instagramstring
linkedinstring
maritalStatusstring
partnerobject
namestring
birthdaystring
anniversarystring
kidsobject[]
namestring
birthdaystring
pronounsstring
notesstring
petsobject[]
namestring
speciesstring
birthdaystring
hometownstring
currentCitystring
homeAddressstring
hobbiesstring[]
favoritesobject
foodstring
drinkstring
musicstring[]
booksstring[]
moviesstring[]
dietaryRestrictionsstring[]
allergiesstring[]
emergencyContactobject
namestring
phonestring
relationshipstring
homeSituationstring
goalsstring[]
giftPrefsstring
sizesobject
clothingstring
shoesstring
healthNotesstring
importantDatesobject[]
labelstring
datestring
recurringboolean
primePrefsobject
nameToUsestring
communicationStylestring
humorstring
pushbackLevelstring
languagesstring[]
visibility reqobject
sectionDefaults reqobject
professionalenumteamprivate
personalenumteamprivate
fieldOverridesobject
identifiers reqobject[]
id reqstring
type reqstring
value reqstring
verified reqboolean
primary reqboolean
labelstring | null
createdAt reqstring
auditLog reqobject[]
fieldPath reqstring
prevValueany
newValueany
by reqenumprimeselfadmin
at reqstring
401Unauthorized
status reqinteger
error_codestring
error reqstring

Request

curl 'https://app.openassistant.us/api/me/profile' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "profile": {
    "visibility": {
      "sectionDefaults": {
        "professional": "team",
        "personal": "private"
      }
    }
  },
  "identifiers": [
    {
      "id": "string",
      "type": "string",
      "value": "string",
      "verified": true,
      "primary": true,
      "createdAt": "2025-01-15T10:30:00.000Z"
    }
  ],
  "auditLog": [
    {
      "fieldPath": "string",
      "by": "prime",
      "at": "2025-01-15T10:30:00.000Z"
    }
  ]
}
PATCH/me/profile

Patch the current user's layered profile. Email and phone updates are NOT accepted here — route those to /identifiers so they go through the verification flow.

Request body

professionalobject
rolestring
companyIdstring | null
companyDisplayNamestring | null
departmentstring
startDatestring
officeLocationstring
workHoursobject
startstring
endstring
daysstring[]
pronounsstring
linkedinUrlstring
biostring
responsibilitiesstring[]
currentProjectsstring[]
managerIdstring | null
reportsstring[]
languagesstring[]
commsStylestring
personalobject
birthdaystring
nicknamesstring[]
genderenummalefemaleother
travelSchedulestring
linksobject[]
typestring
urlstring
socialsobject
twitterstring
instagramstring
linkedinstring
maritalStatusstring
partnerobject
namestring
birthdaystring
anniversarystring
kidsobject[]
namestring
birthdaystring
pronounsstring
notesstring
petsobject[]
namestring
speciesstring
birthdaystring
hometownstring
currentCitystring
homeAddressstring
hobbiesstring[]
favoritesobject
foodstring
drinkstring
musicstring[]
booksstring[]
moviesstring[]
dietaryRestrictionsstring[]
allergiesstring[]
emergencyContactobject
namestring
phonestring
relationshipstring
homeSituationstring
goalsstring[]
giftPrefsstring
sizesobject
clothingstring
shoesstring
healthNotesstring
importantDatesobject[]
labelstring
datestring
recurringboolean
primePrefsobject
nameToUsestring
communicationStylestring
humorstring
pushbackLevelstring
languagesstring[]

Responses

200Updated profile + list of changed field paths
ok reqenumtrue
profile reqobject
professionalobject
rolestring
companyIdstring | null
companyDisplayNamestring | null
departmentstring
startDatestring
officeLocationstring
workHoursobject
startstring
endstring
daysstring[]
pronounsstring
linkedinUrlstring
biostring
responsibilitiesstring[]
currentProjectsstring[]
managerIdstring | null
reportsstring[]
languagesstring[]
commsStylestring
personalobject
birthdaystring
nicknamesstring[]
genderenummalefemaleother
travelSchedulestring
linksobject[]
typestring
urlstring
socialsobject
twitterstring
instagramstring
linkedinstring
maritalStatusstring
partnerobject
namestring
birthdaystring
anniversarystring
kidsobject[]
namestring
birthdaystring
pronounsstring
notesstring
petsobject[]
namestring
speciesstring
birthdaystring
hometownstring
currentCitystring
homeAddressstring
hobbiesstring[]
favoritesobject
foodstring
drinkstring
musicstring[]
booksstring[]
moviesstring[]
dietaryRestrictionsstring[]
allergiesstring[]
emergencyContactobject
namestring
phonestring
relationshipstring
homeSituationstring
goalsstring[]
giftPrefsstring
sizesobject
clothingstring
shoesstring
healthNotesstring
importantDatesobject[]
labelstring
datestring
recurringboolean
primePrefsobject
nameToUsestring
communicationStylestring
humorstring
pushbackLevelstring
languagesstring[]
visibility reqobject
sectionDefaults reqobject
professionalenumteamprivate
personalenumteamprivate
fieldOverridesobject
changed reqstring[]

Request

curl 'https://app.openassistant.us/api/me/profile' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "professional": {
    "role": "string",
    "companyId": "string",
    "companyDisplayName": "string",
    "department": "string"
  },
  "personal": {
    "birthday": "1998-03-17",
    "nicknames": [
      "string"
    ],
    "gender": "male",
    "travelSchedule": "string"
  },
  "primePrefs": {
    "nameToUse": "string",
    "communicationStyle": "string",
    "humor": "string",
    "pushbackLevel": "string"
  }
}'

Response

{
  "ok": true,
  "profile": {
    "visibility": {
      "sectionDefaults": {
        "professional": "team",
        "personal": "private"
      }
    }
  },
  "changed": [
    "string"
  ]
}
PATCH/me/profile/visibility

Flip section sharing defaults and/or per-field overrides. Flipping a section master clears overrides under that section.

Request body

sectionDefaultsobject
professionalenumteamprivate
personalenumteamprivate
fieldOverridesobject

Responses

200Updated visibility
ok reqenumtrue
visibility reqobject
sectionDefaults reqobject
professional reqenumteamprivate
personal reqenumteamprivate
fieldOverrides reqobject

Request

curl 'https://app.openassistant.us/api/me/profile/visibility' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "sectionDefaults": {
    "professional": "team",
    "personal": "team"
  },
  "fieldOverrides": {}
}'

Response

{
  "ok": true,
  "visibility": {
    "sectionDefaults": {
      "professional": "team",
      "personal": "team"
    },
    "fieldOverrides": {}
  }
}
GET/me/referral

Get the current user's referral link and their past referrals. 404s if the account has not enabled the referral program.

Responses

200Referral link + history
ok reqboolean
referralLink reqstring | null
referrals reqobject[]
email reqstring
status reqenumsentcompleted
createdAt reqstring
completedAt reqstring | null
404Referral program not enabled
status reqinteger
error_codestring
error reqstring

Request

curl 'https://app.openassistant.us/api/me/referral' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "referralLink": "string",
  "referrals": [
    {
      "email": "string",
      "status": "sent",
      "createdAt": "2025-01-15T10:30:00.000Z",
      "completedAt": "2025-01-15T10:30:00.000Z"
    }
  ]
}
POST/me/referral/invite

Send a referral invite email to one or more addresses. Dedups permanently per (referrer, email) and blocks self-referral.

Request body

emails reqstring[]

Responses

200Per-email invite result
ok reqboolean
results reqobject[]
email reqstring
result reqenuminvitedalready_referredself_referral_blockedinvalid_emailerror
404Referral program not enabled
status reqinteger
error_codestring
error reqstring

Request

curl 'https://app.openassistant.us/api/me/referral/invite' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "emails": [
    "string"
  ]
}'

Response

{
  "ok": true,
  "results": [
    {
      "email": "string",
      "result": "invited"
    }
  ]
}
DELETE/me/referral/invite/{email}

Remove a sent (not-yet-completed) referral invite. Completed referrals (referred email already signed up) cannot be removed.

Path parameters

email reqstring

Responses

200Invite removed
ok reqboolean
400Invite is already completed or email missing
status reqinteger
error_codestring
error reqstring
404Referral not found or program not enabled
status reqinteger
error_codestring
error reqstring

Request

curl 'https://app.openassistant.us/api/me/referral/invite/<email>' \
  -X DELETE \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true
}