Personal
Fields marked * are required. Updates keep every field they are not given. An AI app can ask vritto_describe for the same details, filtered to what its connection may use.
Personal Profileprofile
The user's own identity, vitals, preferences, and favorites.
personal_getProfileFindthrough vritto_findRead the user's full profile: identity, narrative (headline/about/current focus), vitals, preferences, singular favorites, skills, languages, principles, and social links.
No input.
personal_setFavoriteUpdatethrough vritto_updateRecord the user's favorite(s), one value per slot (e.g. cuisine → 'Thai', movie → 'Arrival'). Merges into their existing favorites; an empty value clears that slot.
| Field | Type | Description |
|---|---|---|
| favorites* | list of object | Favorites to record, one entry per slot. Common slots: movie, show, book, music, artist, food, cuisine, drink, place, city, color, sport, team, hobby, game, quote, season. |
personal_updateProfileUpdatethrough vritto_updateUpdate the profile singleton, identity (name, pronouns, date of birth, birthplace, nationalities, gender, home base, name history), narrative (headline/about/current focus), vitals, preferences (dietary/allergies), principles, skills, languages, or social links. Arrays and narrative REPLACE the stored value, read personal_getProfile first and send the full merged set.
Note: Arrays and narrative replace the stored value; read the profile first and send the full merged set.
| Field | Type | Description |
|---|---|---|
| identity | object | |
| identity.preferredName | string | |
| identity.legalName | string | |
| identity.pronouns | string | |
| identity.gender | string | |
| identity.dateOfBirth | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| identity.birthPlace | object | A light place reference; label is enough. |
| identity.nationalities | list of string | Full replacement list of nationalities. |
| identity.homeBase | object | A light place reference; label is enough. |
| identity.nameHistory | list of object | Full replacement list of prior/other names. |
| narrative | object | Replaces the whole narrative, include all three fields you want kept. |
| narrative.headline | string | |
| narrative.about | string | |
| narrative.currentFocus | string | |
| vitals | object | |
| vitals.height | string | Free text, e.g. "5'11\"" or '180 cm'. |
| vitals.weight | string | |
| vitals.bloodType | one of A+, A-, B+, B-, AB+, AB-, O+, O-, unknown | |
| vitals.starSign | one of aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces | |
| vitals.handedness | one of right, left, ambidextrous | |
| vitals.eyeColor | string | |
| preferences | object | |
| preferences.dietary | list of string | Full replacement list, e.g. ['vegetarian', 'no pork']. |
| preferences.allergies | list of string | Full replacement list of allergies. |
| preferences.notes | string | |
| principles | list of object | Full replacement list of the user's values/principles. |
| skills | list of object | Full replacement list of skills. |
| languages | list of object | Full replacement list of languages. |
| socialLinks | list of object | Full replacement list of social links. |
Life Timelinelife_timeline
The user's dated history of work, education, homes, and more; read-only.
personal_getEntryFindthrough vritto_findRead one complete history entry by id, the full summary, highlights, courses, and module links that the timeline projection leaves out. Use it before amending an existing entry.
| Field | Type | Description |
|---|---|---|
| collection* | one of experiences, education, residences, credentials, projects, relationships | The entry's sourceCollection, as returned by personal_queryTimeline. |
| id* | string | Entry ID from personal_queryTimeline. |
personal_queryTimelineFindthrough vritto_findList the user's dated factual history, work, education, residences, credentials, and projects, in one chronological timeline. Also the source of entity IDs for updating an existing entry.
| Field | Type | Description |
|---|---|---|
| domains | list of one of | Optional filter to specific domains. |
Work Experiencework_experience
A job in the user's history.
personal_addExperienceCreate or Updatethrough vritto_create or vritto_updateAdd a job / work experience to the user's history when they mention one. Omit record.id to create; pass an ID from personal_queryTimeline to update.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing entry ID to update (from personal_queryTimeline); omit to create. Fields you leave out keep their stored value. |
| record.org* | string | Employer / organization. |
| record.title | string | |
| record.employmentType | one of full_time, part_time, self_employed, freelance, contract, internship, apprenticeship, seasonal, volunteer | |
| record.location | object | A light place reference; label is enough. |
| record.start | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.end | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.current | boolean | Set true if they still work here. |
| record.summary | string | |
| record.highlights | list of string | Notable achievements in this role, one per entry. |
| record.personIds | list of string | People-module person IDs tied to this entry (resolve via people_resolvePerson) so it links into their graph. |
| record.visibility | one of private, ai, public | Who can see this. private = only the user; ai = also SahAI; public = the user considers it freely shareable (no public surface renders it today). |
Example input
{
"record": {
"org": "Vritto, Inc.",
"title": "Founder",
"employmentType": "self_employed",
"start": "2026-01",
"current": true
}
}Educationeducation
A school or degree in the user's history.
personal_addEducationCreate or Updatethrough vritto_create or vritto_updateAdd a school / degree to the user's education history. Omit record.id to create; pass an ID from personal_queryTimeline to update.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing entry ID to update (from personal_queryTimeline); omit to create. Fields you leave out keep their stored value. |
| record.institution* | string | |
| record.degree | string | |
| record.field | string | |
| record.start | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.end | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.current | boolean | |
| record.grade | string | GPA or grade, e.g. '3.8' or 'First Class'. |
| record.activities | string | Clubs, societies, sports. |
| record.courses | list of string | Notable courses taken. |
| record.summary | string | |
| record.academicsTermId | string | Optional link to an Academics module term. |
| record.personIds | list of string | People-module person IDs tied to this entry (resolve via people_resolvePerson) so it links into their graph. |
| record.visibility | one of private, ai, public | Who can see this. private = only the user; ai = also SahAI; public = the user considers it freely shareable (no public surface renders it today). |
Residenceresidence
A place the user has lived.
personal_addResidenceCreate or Updatethrough vritto_create or vritto_updateAdd a place the user has lived (home, hometown, study-abroad, work posting). Omit record.id to create; pass an ID from personal_queryTimeline to update.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing entry ID to update (from personal_queryTimeline); omit to create. Fields you leave out keep their stored value. |
| record.place* | object | Where they lived. Required. |
| record.kind | one of home, hometown, study, work, other | Defaults to home. |
| record.start | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.end | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.current | boolean | Set true if they still live here. |
| record.note | string | |
| record.personIds | list of string | People-module person IDs tied to this entry (resolve via people_resolvePerson) so it links into their graph. |
| record.visibility | one of private, ai, public | Who can see this. private = only the user; ai = also SahAI; public = the user considers it freely shareable (no public surface renders it today). |
Credentialcredential
A certification, license, or award.
personal_addCredentialCreate or Updatethrough vritto_create or vritto_updateAdd a credential: a certification, license, or award the user mentions. Omit record.id to create; pass an ID from personal_queryTimeline to update.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing entry ID to update (from personal_queryTimeline); omit to create. Fields you leave out keep their stored value. |
| record.name* | string | Credential name, e.g. 'AWS Solutions Architect'. |
| record.issuer | string | |
| record.issued | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.expires | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.credentialId | string | The issuer's credential/license number. |
| record.url | string | Verification or badge URL. |
| record.personIds | list of string | People-module person IDs tied to this entry (resolve via people_resolvePerson) so it links into their graph. |
| record.visibility | one of private, ai, public | Who can see this. private = only the user; ai = also SahAI; public = the user considers it freely shareable (no public surface renders it today). |
Personal Projectpersonal_project
A side project or creative work.
personal_addProjectCreate or Updatethrough vritto_create or vritto_updateAdd a personal project (side project, startup, creative work) to the user's history. Omit record.id to create; pass an ID from personal_queryTimeline to update.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing entry ID to update (from personal_queryTimeline); omit to create. Fields you leave out keep their stored value. |
| record.name* | string | |
| record.description | string | |
| record.role | string | Their role, e.g. 'founder', 'designer'. |
| record.start | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.end | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.url | string | |
| record.guideId | string | Optional link to a Guides module guide. |
| record.highlights | list of string | Notable outcomes, one per entry. |
| record.personIds | list of string | People-module person IDs tied to this entry (resolve via people_resolvePerson) so it links into their graph. |
| record.visibility | one of private, ai, public | Who can see this. private = only the user; ai = also SahAI; public = the user considers it freely shareable (no public surface renders it today). |
Relationship Historyrelationship_history
A partner, family, or close relationship in the user's history.
personal_addRelationshipCreate or Updatethrough vritto_create or vritto_updateAdd a close relationship or partner history the user mentions (partner, spouse, ex, family, close friend, mentor). Omit record.id to create.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing entry ID to update (from personal_queryTimeline); omit to create. Fields you leave out keep their stored value. |
| record.name* | string | The person's name. |
| record.kind | one of partner, spouse, engaged, ex_partner, situationship, family, friend, mentor, other | |
| record.start | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.end | string | A date the user gives: "2022", "2022-06", "2022-06-15", or free text like "summer 2020". Year is enough. |
| record.current | boolean | Set true if it's ongoing. |
| record.note | string | |
| record.personId | string | The People-module Person record for this person (resolve via people_resolvePerson), set it whenever the person exists there. |
| record.personIds | list of string | People-module person IDs tied to this entry (resolve via people_resolvePerson) so it links into their graph. |
| record.visibility | one of private, ai, public | Who can see this. private = only the user; ai = also SahAI; public = the user considers it freely shareable (no public surface renders it today). |