Appearance
Profile
Matching reads the profile on the signed-in account. A thin signup (email, password, name) is enough to create the account. Scholarships stay narrow until you fill the fields below.
Send Authorization: Bearer <token> on every call on this page.
Read the profile
graphql
query Profile {
me {
id
email
firstName
lastName
dateOfBirth
phone
gender
address {
addressLine1
city
state
zip
}
education {
schoolLevel
gpaOption
degree
degreeType
collegeName
collegeGraduationYear
enrolled
}
citizenship
ethnicity
militaryAffiliation
careerGoal
profileCompletion {
percentage
}
}
}me is null only when the account could not be loaded. An unauthenticated call fails instead of returning an empty profile.
Dictionaries
Load these once and cache them. Every profile enum below is a value from this query. Display name to the student. Sending "California" or "senior" does not match.
graphql
query Dictionaries {
references {
dictionaries {
citizenship { value name }
ethnicities { value name }
careerGoals { value name }
degreeTypes { value name }
degrees { value name }
gpas { value name }
genders { value name }
states { value name }
schoolLevels { value name }
militaryAffiliations { value name }
}
zipData(zipCode: "94105") {
city
state {
name
abbreviation
}
}
}
}gpas includes N/A and the numeric strings 2.0 through 4.1. That string is what you send as education.gpaOption.
zipData fills city and state from a US zip. You still save those on the profile yourself.
references.dictionaries.highSchools(search:, type:, state:, limit:) looks up a school by name. type is HIGH_SCHOOL or COLLEGE. state is a postal abbreviation such as CA, and it only applies to high schools. Use the returned name for collegeName or highSchoolName.
Save the profile
Send only the fields the student has answered. Omitted top-level fields stay as they are.
graphql
mutation UpdateProfile($input: UpdateUserInput!) {
viewer {
updateUser(input: $input) {
success
updatedFields
user {
dateOfBirth
address { state zip }
education { schoolLevel degree degreeType gpaOption }
citizenship
careerGoal
}
errors { code field message }
}
}
}json
{
"input": {
"dateOfBirth": "2007-04-12T00:00:00.000Z",
"gender": "female",
"phone": "+14155550123",
"citizenship": "US_CITIZEN",
"ethnicity": "ASIAN_PACIFIC_ISLANDER",
"militaryAffiliation": "NONE",
"careerGoal": "COMPUTERS_IT_TECHNOLOGY",
"address": {
"addressLine1": "1 Market St",
"city": "San Francisco",
"state": "CALIFORNIA",
"zip": "94105"
},
"education": {
"schoolLevel": "HIGH_SCHOOL_SENIOR",
"degree": "COMPUTER_INFORMATION_SCIENCES",
"degreeType": "BACHELORS",
"gpaOption": "3.8",
"enrolled": false,
"collegeGraduationYear": 2031,
"potentialColleges": ["Stanford University", "UC Berkeley"]
}
}
}Check success. On failure, errors names the field. A full walk-through is in the student flow.
Fields that change matches
| Field | Send |
|---|---|
dateOfBirth | ISO-8601 timestamp. Age rules are checked against this date, not a stored age. |
address.state | A State enum such as CALIFORNIA. |
education.schoolLevel | HIGH_SCHOOL_FRESHMAN, HIGH_SCHOOL_SOPHOMORE, HIGH_SCHOOL_JUNIOR, HIGH_SCHOOL_SENIOR, COLLEGE_1ST_YEAR, COLLEGE_2ND_YEAR, COLLEGE_3RD_YEAR, COLLEGE_4TH_YEAR, GRADUATE_STUDENT, ADULT_NON_TRADITIONAL. |
education.degree | A DegreeField such as COMPUTER_INFORMATION_SCIENCES. This is the field of study. |
education.degreeType | BACHELORS, ASSOCIATES, MASTERS, DOCTORAL, CERTIFICATE, GRADUATE_CERTIFICATE, UNDECIDED. |
education.gpaOption | A GPA string from dictionaries.gpas. |
citizenship | US_CITIZEN, US_PERMANENT_RESIDENT, US_TEMPORARY_RESIDENT. |
ethnicity | AFRICAN_AMERICAN, AMERICAN_INDIAN_NATIVE_ALASKAN, ASIAN_PACIFIC_ISLANDER, CAUCASIAN, HISPANIC_LATINO, OTHER. |
gender | A value from dictionaries.genders. |
militaryAffiliation | A value from dictionaries.militaryAffiliations. |
careerGoal | COMPUTERS_IT_TECHNOLOGY, HEALTH_CARE_NURSING, BUSINESS_MARKETING_MANAGEMENT, TEACHING_EDUCATION, ART_DESIGN_FASHION, LAW_CRIMINAL_JUSTICE, CULINARY_ARTS, BEAUTY_COSMETOLOGY, VOCATIONAL_TECHNICAL, OTHER. |
College names: send education.potentialColleges as the full list of schools the student is considering. Sending collegeName1 through collegeName4 rewrites that list and clears any slot you leave out. For a student who is already enrolled, set education.enrolled: true and education.collegeName to the current school.
profileCompletion.percentage is Core's completeness score. Use it for a progress meter. It is not a list of missing fields. percentageOrNull is null when Core did not report a score, so a client can keep the last known percentage instead of showing 0.
dictionaries.profilePolicies.minAge is the youngest date of birth the profile will accept.
Some states require a consent step before you save citizenship or ethnicity. dictionaries.states.requiresSpiConsent tells you when to show it. Saving spiCollect: false clears citizenship and ethnicity already stored on the account.
The student's applications
graphql
query MyApplications($first: Int!, $after: String) {
viewer {
applications(
filters: { status: [SUBMITTED] }
pagination: { first: $first, after: $after }
sort: { field: DATE_APPLIED, direction: DESC }
) {
totalCount
pageInfo { hasNextPage endCursor }
nodes {
id
dateApplied
scholarship { id title amount deadline }
}
}
}
}status is INCOMPLETE, IN_PROGRESS, READY_TO_SUBMIT, or SUBMITTED. submittedAfter and submittedBefore bound dateApplied. Sort fields are DATE_APPLIED, DEADLINE, AMOUNT, and STATUS_UPDATED_AT.
