Skip to content

People API ​

Base URL: /api/v1/people/

Manage person records and their associated data (names, addresses, phones, emails, identifiers, demographics).

Endpoints Overview ​

Persons ​

MethodEndpointDescription
GET/personsList all persons
POST/personsCreate a new person
GET/persons/{id}Get person details
PATCH/persons/{id}Update person
DELETE/persons/{id}Delete person
GET/persons/searchSearch persons
GET/persons/{id}/demographicsGet full demographics
GET/persons/{id}/rolesGet all roles (student, teacher, etc.)
GET/persons/{id}/photoGet person's photo metadata
GET/persons/{id}/photo/fileGet actual image file
POST/persons/{id}/photoUpload photo
DELETE/persons/{id}/photoDelete photo
POST/persons/mergeMerge two person records

Person Names ​

MethodEndpointDescription
GET/person-namesList names
POST/person-namesCreate name
PATCH/person-names/{id}Update name
POST/person-names/{id}/end_dateEnd-date a name
GET/person-names/historyGet name history
GET/person-names/audit_logGet audit log

Other Person Data ​

ResourceEndpointMethods
Addresses/person-addressesGET, POST, PATCH, DELETE
Phones/person-phonesGET, POST, PATCH, DELETE
Emails/person-emailsGET, POST, PATCH, DELETE
Identifiers/person-identifiersGET, POST, GET/{id}, PATCH/{id}, DELETE/
Name Configs/person-name-configsGET, POST, PATCH, DELETE
Races/person-racesGET, POST, DELETE, bulk_update
Visa Statuses/person-visa-statusesGET, POST, PATCH, DELETE

Institutional email addresses are identity, not contact data

An email is institutional when its type is SCHOOL or its address is at an active, protected institution_domains row (puc.edu, sda.edu, subdomains included) -- both halves count, because Colleague files some puc.edu addresses as personal. SSO links a login to a person by these addresses, so over HTTP only a caller acting as a superuser (a superuser whose active role grants it) may create, change or retire one: POST, PATCH and DELETE /person-emails answer 403 ("Institutional email addresses can only be added or changed by a system administrator") when either the row as it stands or the row as it would become is institutional.

The same rule covers people.primary_email on person create and update: setting it to an address at a protected domain needs a superuser, unless the person already holds that address as a current email. Email rows carry is_institutional so a client can show the field as locked, and GET /people/institutional-domains lists the protected domains so a form can warn before a save the server would refuse. The nightly Colleague import writes the tables directly and is exempt (people/institutional.go).

Person Test Scores ​

MethodEndpointDescription
GET/person-test-scoresList test scores
POST/person-test-scoresCreate test score
GET/person-test-scores/{id}Get test score details
PATCH/person-test-scores/{id}Update test score
DELETE/person-test-scores/{id}Delete test score

Person Activities ​

MethodEndpointDescription
GET/person-activitiesList activities
POST/person-activitiesCreate activity
GET/person-activities/{id}Get activity details
PATCH/person-activities/{id}Update activity
DELETE/person-activities/{id}Delete activity

Person Essays ​

MethodEndpointDescription
GET/person-essaysList essays
POST/person-essaysCreate essay
GET/person-essays/{id}Get essay details
PATCH/person-essays/{id}Update essay
DELETE/person-essays/{id}Delete essay

Person Recommendations ​

MethodEndpointDescription
GET/person-recommendationsList recommendations
POST/person-recommendationsCreate recommendation
GET/person-recommendations/{id}Get recommendation details
PATCH/person-recommendations/{id}Update recommendation
DELETE/person-recommendations/{id}Delete recommendation
POST/person-recommendations/{id}/resend_requestResend recommendation request

Person Honors ​

MethodEndpointDescription
GET/person-honorsList honors
POST/person-honorsCreate honor
GET/person-honors/{id}Get honor details
PATCH/person-honors/{id}Update honor
DELETE/person-honors/{id}Delete honor

Person Family Members ​

MethodEndpointDescription
GET/person-family-membersList family members
POST/person-family-membersCreate family member
GET/person-family-members/{id}Get family member details
PATCH/person-family-members/{id}Update family member
DELETE/person-family-members/{id}Delete family member

Photos ​

MethodEndpointDescription
GET/persons/{personID}/photo/file?size=thumb|display|originalThe image itself; display by default. Use thumb in lists
GET/photo-approvalsList pending photo approvals
POST/photo-approvals/{photoID}/reviewApprove or reject a photo
GET/photo-approvals/{photoID}/file?size=Queue preview, addressed by photo id
GET/photo-submissionsApproved uploads awaiting hand-off to the official repository
POST/photo-submissions/mark-submittedRecord that uploads were put through the external form
GET/photo-syncOfficial repository sync status and run history
POST/photo-sync/runsStart a sync (202; runs in the background)

See Photo Repository for the precedence rules and the sweep's safety guards.


Persons ​

List Persons ​

GET /api/v1/people/persons

Returns a paginated list of persons.

Query Parameters ​

ParameterTypeDescription
is_activebooleanFilter by active status
gender_idintegerFilter by gender lookup ID
nationality_country_codestringFilter by nationality (ISO code)
rolestringFilter by role: student, teacher, advisor, applicant
searchstringSearch in email, first_name, last_name
orderingstringSort by: created_at, updated_at, primary_email

Example Request ​

bash
curl -X GET "http://localhost:8000/api/v1/people/persons?role=student&search=smith" \
  -b cookies.txt

Success Response (200 OK) ​

json
{
  "count": 150,
  "next": "http://localhost:8000/api/v1/people/persons?page=2",
  "previous": null,
  "results": [
    {
      "person_id": "550e8400-e29b-41d4-a716-446655440000",
      "person_id_number": "STU001234",
      "primary_email": "john.smith@university.edu",
      "display_name": "John Smith",
      "date_of_birth": "2000-05-15",
      "is_active": true,
      "is_student": true,
      "is_teacher": false,
      "is_advisor": false,
      "is_applicant": false,
      "created_at": "2024-01-15T10:30:00Z"
    }
  ]
}

TypeScript Types ​

typescript
interface Person {
  person_id: string
  person_id_number?: string
  primary_email: string | null
  display_name: string
  date_of_birth: string | null
  gender_id?: number | null
  gender_display: string | null
  ethnicity_id?: number | null
  ethnicity_code?: string | null
  ethnicity_display?: string | null
  religion_id?: number | null
  religion_code?: string | null
  religion_display?: string | null
  country_of_birth_id?: number | null
  country_of_birth_name?: string | null
  citizenship_country_id?: number | null
  citizenship_country_name?: string | null
  nationality_country_code: string | null
  citizenship_country_code: string | null
  is_active: boolean
  is_student?: boolean
  is_teacher?: boolean
  is_advisor?: boolean
  is_applicant?: boolean
  names?: PersonName[]
  addresses?: PersonAddress[]
  phones?: PersonPhone[]
  emails?: PersonEmail[]
  races?: PersonRace[]
  created_at: string
  updated_at: string
}

Get Person Details ​

GET /api/v1/people/persons/{id}

Get full details for a person including all related data.

Path Parameters ​

ParameterTypeDescription
idUUIDPerson ID

Success Response (200 OK) ​

json
{
  "person_id": "550e8400-e29b-41d4-a716-446655440000",
  "person_id_number": "STU001234",
  "primary_email": "john.smith@university.edu",
  "display_name": "John Smith",
  "date_of_birth": "2000-05-15",
  "gender_id": 20,
  "gender_display": "Male",
  "ethnicity_id": 30,
  "ethnicity_code": "WHITE",
  "ethnicity_display": "White",
  "religion_id": null,
  "religion_code": null,
  "religion_display": null,
  "country_of_birth_id": 1,
  "country_of_birth_name": "United States",
  "citizenship_country_id": 1,
  "citizenship_country_name": "United States",
  "is_active": true,
  "names": [
    {
      "person_name_id": 1,
      "name_type_code": "LEGAL_PRIMARY",
      "name_type_display": "Legal Primary Name",
      "first_name": "John",
      "middle_name": "Robert",
      "last_name": "Smith",
      "suffix": null,
      "full_name": "John Robert Smith",
      "effective_date": "2000-05-15",
      "end_date": null,
      "is_current": true
    }
  ],
  "addresses": [
    {
      "address_id": 1,
      "address_type_code": "HOME",
      "address_type_display": "Home Address",
      "address_line_1": "123 Main St",
      "address_line_2": "Apt 4B",
      "city": "Anytown",
      "state_province": "NY",
      "postal_code": "12345",
      "country_code": "US",
      "full_address": "123 Main St, Apt 4B, Anytown, NY 12345, US",
      "is_current": true,
      "is_primary": true
    }
  ],
  "phones": [
    {
      "phone_id": 1,
      "phone_type_code": "MOBILE",
      "phone_type_display": "Mobile Phone",
      "country_code": "1",
      "phone_number": "5551234567",
      "extension": null,
      "formatted_number": "+1 5551234567",
      "is_current": true,
      "is_primary": true
    }
  ],
  "emails": [
    {
      "email_id": 1,
      "email_type_code": "INSTITUTIONAL",
      "email_type_display": "Institutional Email",
      "email_address": "john.smith@university.edu",
      "is_current": true,
      "is_primary": true
    }
  ],
  "races": [
    {
      "person_race_id": 1,
      "race_id": 5,
      "race_code": "WHITE",
      "race_display": "White"
    }
  ],
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2024-06-20T14:45:00Z"
}

Create Person ​

POST /api/v1/people/persons

Create a new person record.

Request Body ​

FieldTypeRequiredDescription
primary_emailstringNoPrimary email address
date_of_birthdateNoDate of birth (YYYY-MM-DD)
gender_idintegerNoGender lookup value ID
ethnicity_idintegerNoEthnicity lookup value ID
religion_idintegerNoReligion lookup value ID
country_of_birth_idintegerNoCountry of birth ID
citizenship_country_idintegerNoCitizenship country ID
nationality_country_codestringNoNationality ISO code
is_activebooleanNoActive status (default: true)

Example Request ​

bash
curl -X POST http://localhost:8000/api/v1/people/persons \
  -b cookies.txt \
  -H "Content-Type: application/json" \
  -d '{
    "primary_email": "new.student@university.edu",
    "date_of_birth": "2005-03-20",
    "gender_id": 20,
    "citizenship_country_id": 1
  }'

Update Person ​

PATCH /api/v1/people/persons/{id}

Update a person's demographic information.

Request Body ​

FieldTypeDescription
date_of_birthdateDate of birth
gender_idintegerGender lookup value ID
ethnicity_idintegerEthnicity lookup value ID
religion_idintegerReligion lookup value ID
country_of_birth_idintegerCountry of birth ID
citizenship_country_idintegerCitizenship country ID
nationality_country_codestringNationality ISO code
primary_emailstringPrimary email
is_activebooleanActive status

Search Persons ​

GET /api/v1/people/persons/search?q={query}

Search persons by name or email.

Query Parameters ​

ParameterTypeRequiredDescription
qstringYesSearch query (min 2 characters)

Success Response (200 OK) ​

Returns up to 20 matching persons in list format.


Get Demographics ​

GET /api/v1/people/persons/{id}/demographics

Get full demographic information including races and visa statuses.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": {
    "person_id": "550e8400-e29b-41d4-a716-446655440000",
    "display_name": "John Smith",
    "date_of_birth": "2000-05-15",
    "gender_id": 20,
    "gender_display": "Male",
    "ethnicity_id": 30,
    "ethnicity_code": "WHITE",
    "ethnicity_display": "White",
    "races": [
      {
        "person_race_id": 1,
        "race_code": "WHITE",
        "race_display": "White"
      }
    ],
    "visa_statuses": [
      {
        "visa_status_id": 1,
        "visa_type_code": "F1",
        "visa_type_display": "F-1 Student Visa",
        "visa_expiry_date": "2026-05-15",
        "sevis_id": "N0001234567",
        "is_current": true
      }
    ]
  }
}

Get Person Roles ​

GET /api/v1/people/persons/{id}/roles

Get all roles associated with a person (student, teacher, advisor, applicant).

Success Response (200 OK) ​

json
{
  "success": true,
  "data": {
    "person_id": "550e8400-e29b-41d4-a716-446655440000",
    "display_name": "John Smith",
    "is_student": true,
    "student": {
      "student_id": 1001,
      "student_number": "STU001234",
      "initial_term_code": "FA2024",
      "student_status_display": "Active",
      "programs": [...]
    },
    "is_teacher": false,
    "teacher": null,
    "is_advisor": false,
    "advisors": [],
    "is_applicant": true,
    "applications": [
      {
        "applicant_id": 500,
        "application_term_code": "FA2024",
        "application_status_display": "Admitted"
      }
    ],
    "authorization_roles": [
      {
        "role_code": "STUDENT",
        "role_name": "Student",
        "is_currently_active": true
      }
    ]
  }
}

TypeScript Types ​

typescript
interface PersonRoles {
  person_id: string
  display_name: string
  is_student: boolean
  student: Student | null
  is_teacher: boolean
  teacher: Teacher | null
  is_advisor: boolean
  advisors: Advisor[]
  is_applicant: boolean
  applications: Applicant[]
  authorization_roles: AuthorizationRole[]
}

Photo Management ​

Get Photo Metadata ​

GET /api/v1/people/persons/{id}/photo

Returns metadata about the person's photo (status, approval state, URLs).

Get Photo File ​

GET /api/v1/people/persons/{id}/photo/file

Returns the actual image file (JPG or PNG) or a default placeholder.

Response: Image file (JPG or PNG)

Upload Photo ​

POST /api/v1/people/persons/{id}/photo

Upload a photo for a person.

Content-Type: multipart/form-data

FieldTypeDescription
photofileJPG or PNG image (max 2MB)

Delete Photo ​

DELETE /api/v1/people/persons/{id}/photo

Delete a person's photo.


Photo Approvals ​

Manage photo approval workflow for uploaded person photos.

List Pending Approvals ​

GET /api/v1/people/photo-approvals

Returns a list of photos pending approval.

Review Photo ​

POST /api/v1/people/photo-approvals/{photoID}/review

Approve or reject a pending photo.

Request Body ​

FieldTypeRequiredDescription
actionstringYesapprove or reject
reasonstringNoReason for rejection

Person Merge ​

Merge Persons ​

POST /api/v1/people/persons/merge

Merge two person records into one. The source person's data is merged into the target person, and the source person is deactivated.

Request Body ​

FieldTypeRequiredDescription
source_person_idUUIDYesPerson to merge from (will be deactivated)
target_person_idUUIDYesPerson to merge into (will be kept)

Person Names ​

Names support full audit logging and historical tracking.

Create Name ​

POST /api/v1/people/person-names

Request Body ​

FieldTypeRequiredDescription
person_idUUIDYesPerson ID
name_type_idintegerYesName type (LEGAL_PRIMARY, PREFERRED, MAIDEN, etc.)
first_namestringYesFirst name
last_namestringYesLast name
middle_namestringNoMiddle name
suffixstringNoSuffix (Jr., III, etc.)
effective_datedateNoWhen name became effective
change_reasonstringNoReason for change (for audit)

TypeScript Types ​

typescript
interface PersonName {
  person_name_id: number
  person_id: string
  name_type_id?: number
  name_type_code: string
  name_type_display: string
  first_name: string | null
  middle_name: string | null
  last_name: string | null
  suffix: string | null
  full_name: string
  effective_date: string
  end_date: string | null
  is_current: boolean
}

End-Date Name ​

POST /api/v1/people/person-names/{id}/end_date

Mark a name record as no longer current.

Request Body ​

FieldTypeRequiredDescription
end_datedateNoEnd date (defaults to today)
change_reasonstringNoReason for ending

Get Name History ​

GET /api/v1/people/person-names/history?person_id={person_id}

Get all name records for a person, including historical names.


Get Audit Log ​

GET /api/v1/people/person-names/audit_log?person_id={person_id}

Get audit log entries for name changes.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": [
    {
      "audit_id": 1,
      "person_name_id": 5,
      "action": "UPDATE",
      "action_display": "Updated",
      "changed_by": "admin@example.com",
      "changed_at": "2024-06-20T14:45:00Z",
      "field_name": "last_name",
      "old_value": "Smith",
      "new_value": "Smith-Jones",
      "change_reason": "Marriage"
    }
  ]
}

Other Person Data ​

Addresses, Phones, Emails ​

All follow the same CRUD pattern with filtering by person_id.

Common Fields ​

Addresses:

  • address_type_id - Type (HOME, MAILING, PERMANENT, etc.)
  • address_line_1, address_line_2, address_line_3
  • city, state_province, postal_code, country_code
  • is_current, is_primary

Phones:

  • phone_type_id - Type (MOBILE, HOME, WORK, etc.)
  • country_code, phone_number, extension
  • is_current, is_primary

Emails:

  • email_type_id - Type (PERSONAL, WORK, INSTITUTIONAL)
  • email_address
  • is_current, is_primary

Person Identifiers ​

Full CRUD operations for person identifier records (SSN, passport, driver's license, etc.).

MethodEndpointDescription
GET/person-identifiersList identifiers (filter by person_id)
POST/person-identifiersCreate identifier
GET/person-identifiers/{id}Get identifier details
PATCH/person-identifiers/{id}Update identifier
DELETE/person-identifiers/{id}Delete identifier

Races (Multi-Select) ​

Bulk Update Races ​

POST /api/v1/people/person-races/bulk_update

Replace all races for a person.

Request Body ​

json
{
  "person_id": "550e8400-e29b-41d4-a716-446655440000",
  "race_ids": [1, 3, 5]
}

Visa Statuses ​

Track immigration status for international people (migration 281). A person is international when a citizenship is on file and none of their citizenships -- the primary citizenship_country_id or any additional citizenship -- is the HOME_COUNTRY setting. The server decides it and returns it on the person detail as is_international, with home_country_code; clients must not recompute it.

Create Visa Status ​

POST /api/v1/people/person-visa-statuses

Refused with 409 for a person who is not international, so records the UI would hide cannot accumulate. PATCH /person-visa-statuses/{visaStatusID} takes the same fields, all optional.

Request Body ​

FieldTypeRequiredDescription
person_idUUIDYesPerson ID
visa_type_idintegerYesVISA_TYPE lookup: STUDENT, RESIDENT, H1B, F1, J1, M1, DEPENDENT, REFUGEE, OTHER
visa_expiry_datedateNoVisa expiration date
sevis_idstringNoSEVIS ID (max 20)
effective_datedateNoWhen the status became effective
is_currentbooleanNoIs this the current status
notesstringNoAdditional notes (max 500)
statusstringNoPENDING, ACTIVE (default), EXPIRED or TERMINATED
document_issue_date, program_start_date, program_end_datedateNoProgram end may not precede its start
entry_date, port_of_entrydate, stringNoMost recent entry
orientation_datedateNo
sponsor, financial_support_source, financial_support_amountstringNoAmount is a decimal string
health_insurance_end_datedateNo
work_auth_typestringNoCPT, OPT, STEM_OPT, ON_CAMPUS or OTHER
work_auth_start_date, work_auth_end_datedateNoEnd may not precede start
sevis_statusstringNoUS only: INITIAL, ACTIVE, TERMINATED or COMPLETED
form_typestringNoUS only: I20 or DS2019

sevis_status and form_type are accepted in any deployment; the UI shows them only when home_country_code is US. Document numbers (passport, I-94, EAD, I-20 / DS-2019) are not fields here: they are person identifiers, so they inherit encryption, audited reveal and retention.

TypeScript Types ​

typescript
interface PersonVisaStatus {
  visa_status_id: number
  person_id: string
  visa_type_id: number
  visa_type_display?: string
  visa_expiry_date?: string
  sevis_id?: string
  is_current: boolean
  effective_date?: string
  notes?: string
  status?: 'PENDING' | 'ACTIVE' | 'EXPIRED' | 'TERMINATED'
  // ...plus the immigration fields in the table above
}

Additional Citizenships ​

core.person_citizenships (migration 281) holds citizenships beyond the single citizenship_country_id on the person. Gated like the other person sub-records (PEOPLE.VIEW to read, PEOPLE.EDIT to write).

MethodEndpointDescription
GET/person-citizenships?person_id=List a person's additional citizenships (person_id required)
POST/person-citizenshipsAdd one: { "person_id": "...", "country_id": 840 }. 409 if already recorded; a validation error for an unknown country
DELETE/person-citizenships/{citizenshipID}Remove one

Each row is { person_citizenship_id, person_id, country_id, country_name, country_code }.


Person Test Scores ​

Manage standardized test scores (SAT, ACT, GRE, etc.) for persons.

MethodEndpointDescription
GET/person-test-scoresList test scores (filter by person_id)
POST/person-test-scoresCreate test score
GET/person-test-scores/{id}Get test score details
PATCH/person-test-scores/{id}Update test score
DELETE/person-test-scores/{id}Delete test score

Person Activities ​

Manage extracurricular activities and involvement records for persons.

MethodEndpointDescription
GET/person-activitiesList activities (filter by person_id)
POST/person-activitiesCreate activity
GET/person-activities/{id}Get activity details
PATCH/person-activities/{id}Update activity
DELETE/person-activities/{id}Delete activity

Person Essays ​

Manage essay submissions for persons (typically for admissions).

MethodEndpointDescription
GET/person-essaysList essays (filter by person_id)
POST/person-essaysCreate essay
GET/person-essays/{id}Get essay details
PATCH/person-essays/{id}Update essay
DELETE/person-essays/{id}Delete essay

Person Recommendations ​

Manage recommendation requests and submissions for persons.

MethodEndpointDescription
GET/person-recommendationsList recommendations (filter by person_id)
POST/person-recommendationsCreate recommendation
GET/person-recommendations/{id}Get recommendation details
PATCH/person-recommendations/{id}Update recommendation
DELETE/person-recommendations/{id}Delete recommendation
POST/person-recommendations/{id}/resend_requestResend recommendation request email

Person Honors ​

Manage academic honors and awards for persons.

MethodEndpointDescription
GET/person-honorsList honors (filter by person_id)
POST/person-honorsCreate honor
GET/person-honors/{id}Get honor details
PATCH/person-honors/{id}Update honor
DELETE/person-honors/{id}Delete honor

Person Family Members ​

Manage family member records linked to persons (parents, guardians, siblings, etc.).

MethodEndpointDescription
GET/person-family-membersList family members (filter by person_id)
POST/person-family-membersCreate family member
GET/person-family-members/{id}Get family member details
PATCH/person-family-members/{id}Update family member
DELETE/person-family-members/{id}Delete family member



Complete endpoint reference ​

Every route this domain registers, with the permission node that gates it. Generated from the route table, so it is complete by construction — the sections above explain behaviour, this one guarantees nothing is missing.

Paths are relative to /api/v1/people. A node in italics is an exemption rather than a grant: selfservice acts only on the caller's own record, public needs no session at all, and custom carries its own wrapper.

MethodEndpointPermission nodeDescription
GET/identifier-access-logPEOPLE.IDENTIFIER.ACCESS_LOGGet identifier access log
GET/identifier-typesselfserviceList identifier types
POST/identifier-typesADMIN.IDENTIFIER_TYPESCreate an identifier type
DELETE/identifier-types/{identifierTypeID}ADMIN.IDENTIFIER_TYPESDelete an identifier type
GET/identifier-types/{identifierTypeID}selfserviceGet one identifier type
PATCH/identifier-types/{identifierTypeID}ADMIN.IDENTIFIER_TYPESUpdate an identifier type
GET/institutional-domainsselfserviceList protected institution domains
GET/meselfserviceGet the caller's own person record
POST/me/addressesselfserviceAdd an address to the caller's record
PATCH/me/addresses/{addressID}selfserviceUpdate one of the caller's addresses
POST/me/emailsselfserviceAdd an email to the caller's record
PATCH/me/emails/{emailID}selfserviceUpdate one of the caller's emails
POST/me/phonesselfserviceAdd a phone to the caller's record
PATCH/me/phones/{phoneID}selfserviceUpdate one of the caller's phones
GET/me/relationshipsselfserviceList the caller's relationships
GET/me/relationships/typesselfserviceList relationship types
GET/person-activitiesPEOPLE.VIEWList person activities
POST/person-activitiesPEOPLE.EDITCreate a person activity
DELETE/person-activities/{activityID}PEOPLE.EDITDelete a person activity
GET/person-activities/{activityID}PEOPLE.VIEWGet one person activity
PATCH/person-activities/{activityID}PEOPLE.EDITUpdate a person activity
GET/person-addressesPEOPLE.VIEWList person addresses
POST/person-addressesPEOPLE.EDITCreate a person address
DELETE/person-addresses/{addressID}PEOPLE.EDITDelete a person address
GET/person-addresses/{addressID}PEOPLE.VIEWGet one person address
PATCH/person-addresses/{addressID}PEOPLE.EDITUpdate a person address
GET/person-citizenshipsPEOPLE.VIEWList a person's additional citizenships
POST/person-citizenshipsPEOPLE.EDITAdd a citizenship
DELETE/person-citizenships/{citizenshipID}PEOPLE.EDITRemove a citizenship
GET/person-emailsPEOPLE.VIEWList person emails
POST/person-emailsPEOPLE.EDITCreate a person email
DELETE/person-emails/{emailID}PEOPLE.EDITDelete a person email
GET/person-emails/{emailID}PEOPLE.VIEWGet one person email
PATCH/person-emails/{emailID}PEOPLE.EDITUpdate a person email
GET/person-essaysPEOPLE.VIEWList person essays
POST/person-essaysPEOPLE.EDITCreate a person essay
DELETE/person-essays/{essayID}PEOPLE.EDITDelete a person essay
GET/person-essays/{essayID}PEOPLE.VIEWGet one person essay
PATCH/person-essays/{essayID}PEOPLE.EDITUpdate a person essay
GET/person-family-membersPEOPLE.VIEWList person family members
POST/person-family-membersPEOPLE.EDITCreate a person family member
DELETE/person-family-members/{familyMemberID}PEOPLE.EDITDelete a person family member
GET/person-family-members/{familyMemberID}PEOPLE.VIEWGet one person family member
PATCH/person-family-members/{familyMemberID}PEOPLE.EDITUpdate a person family member
GET/person-honorsPEOPLE.VIEWList person honors
POST/person-honorsPEOPLE.EDITCreate a person honor
DELETE/person-honors/{honorID}PEOPLE.EDITDelete a person honor
GET/person-honors/{honorID}PEOPLE.VIEWGet one person honor
PATCH/person-honors/{honorID}PEOPLE.EDITUpdate a person honor
GET/person-identifiersPEOPLE.VIEWList person identifiers
POST/person-identifiersPEOPLE.EDITCreate a person identifier
DELETE/person-identifiers/{identifierID}PEOPLE.EDITDelete a person identifier
GET/person-identifiers/{identifierID}PEOPLE.VIEWGet one person identifier
PATCH/person-identifiers/{identifierID}PEOPLE.EDITUpdate a person identifier
POST/person-identifiers/{identifierID}/revealselfserviceAdd reveal to a person identifier
GET/person-name-configsPEOPLE.VIEWList person name configs
POST/person-name-configsPEOPLE.EDITCreate a person name config
DELETE/person-name-configs/{configID}PEOPLE.EDITDelete a person name config
GET/person-name-configs/{configID}PEOPLE.VIEWGet one person name config
GET/person-namesPEOPLE.VIEWList person names
POST/person-namesPEOPLE.EDITCreate a person name
GET/person-names/audit_logPEOPLE.VIEWGet audit log
GET/person-names/historyPEOPLE.VIEWGet history
DELETE/person-names/{nameID}PEOPLE.EDITDelete a person name
GET/person-names/{nameID}PEOPLE.VIEWGet one person name
PATCH/person-names/{nameID}PEOPLE.EDITUpdate a person name
GET/person-names/{nameID}/audit-logPEOPLE.VIEWGet the person name's audit log
POST/person-names/{nameID}/end_datePEOPLE.EDITAdd end date to a person name
GET/person-phonesPEOPLE.VIEWList person phones
POST/person-phonesPEOPLE.EDITCreate a person phone
DELETE/person-phones/{phoneID}PEOPLE.EDITDelete a person phone
GET/person-phones/{phoneID}PEOPLE.VIEWGet one person phone
PATCH/person-phones/{phoneID}PEOPLE.EDITUpdate a person phone
GET/person-racesPEOPLE.VIEWList person races
POST/person-racesPEOPLE.EDITCreate a person race
POST/person-races/bulk_updatePEOPLE.EDITBulk update
DELETE/person-races/{raceID}PEOPLE.EDITDelete a person race
GET/person-recommendationsPEOPLE.VIEWList person recommendations
POST/person-recommendationsPEOPLE.EDITCreate a person recommendation
DELETE/person-recommendations/{recommendationID}PEOPLE.EDITDelete a person recommendation
GET/person-recommendations/{recommendationID}PEOPLE.VIEWGet one person recommendation
PATCH/person-recommendations/{recommendationID}PEOPLE.EDITUpdate a person recommendation
POST/person-recommendations/{recommendationID}/resend_requestPEOPLE.EDITAdd resend request to a person recommendation
GET/person-relationshipsPEOPLE.TAB.RELATIONSHIPSList person relationships
POST/person-relationshipsPEOPLE.TAB.RELATIONSHIPSCreate a person relationship
GET/person-relationships/typesPEOPLE.TAB.RELATIONSHIPSList types
DELETE/person-relationships/{relationshipID}PEOPLE.TAB.RELATIONSHIPSDelete a person relationship
GET/person-relationships/{relationshipID}PEOPLE.TAB.RELATIONSHIPSGet one person relationship
PATCH/person-relationships/{relationshipID}PEOPLE.TAB.RELATIONSHIPSUpdate a person relationship
GET/person-test-scoresPEOPLE.VIEWList person test scores
POST/person-test-scoresPEOPLE.EDITCreate a person test score
DELETE/person-test-scores/{scoreID}PEOPLE.EDITDelete a person test score
GET/person-test-scores/{scoreID}PEOPLE.VIEWGet one person test score
PATCH/person-test-scores/{scoreID}PEOPLE.EDITUpdate a person test score
GET/person-visa-statusesPEOPLE.VIEWList person visa statuses
POST/person-visa-statusesPEOPLE.EDITCreate a person visa status
DELETE/person-visa-statuses/{visaStatusID}PEOPLE.EDITDelete a person visa status
GET/person-visa-statuses/{visaStatusID}PEOPLE.VIEWGet one person visa status
PATCH/person-visa-statuses/{visaStatusID}PEOPLE.EDITUpdate a person visa status
GET/personsPEOPLE.VIEWList persons
POST/personsPEOPLE.EDITCreate a person
POST/persons/mergePEOPLE.EDITMerge
GET/persons/searchPEOPLE.SEARCHSearch
DELETE/persons/{personID}PEOPLE.EDITDelete a person
GET/persons/{personID}PEOPLE.VIEWGet one person
PATCH/persons/{personID}PEOPLE.EDITUpdate a person
GET/persons/{personID}/demographicsPEOPLE.TAB.DEMOGRAPHICSList the person's demographics
GET/persons/{personID}/ferpa-historyPEOPLE.FERPA_OPT_OUTGet FERPA opt-out history
PUT/persons/{personID}/ferpa-opt-outPEOPLE.FERPA_OPT_OUTSet FERPA opt-out
DELETE/persons/{personID}/photoselfserviceRemove photo from a person
GET/persons/{personID}/photoselfserviceGet the person's photo
POST/persons/{personID}/photoselfserviceAdd photo to a person
GET/persons/{personID}/photo/fileselfserviceGet file
GET/persons/{personID}/rolesPEOPLE.VIEWList the person's roles
GET/persons/{personID}/superscore/{testTypeID}STUDENTS.TAB.TEST_SCORESGet one superscore
GET/persons/{personID}/test-scoresSTUDENTS.TAB.TEST_SCORESList the person's test scores
POST/persons/{personID}/test-scoresSTUDENTS.SCORES.EDITAdd test scores to a person
GET/photo-approvalsPEOPLE.PHOTO_APPROVAL_QUEUEList photo approvals
GET/photo-approvals/{photoID}/filePEOPLE.PHOTO_APPROVAL_QUEUEQueue image, by photo id
POST/photo-approvals/{photoID}/reviewPEOPLE.PHOTO_APPROVAL_QUEUEAdd review to a photo approval
GET/photo-submissionsPEOPLE.PHOTO_SUBMISSION_QUEUEUploads awaiting submission
POST/photo-submissions/mark-submittedPEOPLE.PHOTO_SUBMISSION_QUEUEMark uploads submitted
GET/photo-syncPEOPLE.PHOTO_SYNCSync status and history
POST/photo-sync/runsPEOPLE.PHOTO_SYNCStart a sync

Student Information System Documentation