Skip to content

Profile ​

Query me to read the signed-in student's profile. Call viewer.updateUser to save changes. Owlflow uses those fields to calculate scholarship eligibility. More profile data usually produces more matches.

Send Authorization: Bearer <token> with every request 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
    }
  }
}

Owlflow returns me: null only when it can't load the account. Without a valid JWT, Owlflow returns an authentication error instead of an empty profile.

Dictionaries ​

Load and cache the dictionaries before building your profile form. Send the value in mutations and display the corresponding name to the student. Do not send display labels such as "California" or "senior" in place of enum values.

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
      }
    }
  }
}

The gpas dictionary includes N/A and numeric strings from 2.0 through 4.1. Send the selected string as education.gpaOption.

Call references.zipData to look up a city and state from a US ZIP code. references.zipData doesn't update the profile. Send the returned city and state through viewer.updateUser.

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 school name Owlflow returns for collegeName or highSchoolName.

Save the profile ​

Send only the fields the student has provided. Owlflow leaves omitted top-level fields unchanged.

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 viewer.updateUser.success before updating your interface. When validation fails, each item in errors identifies the affected field. The student flow includes the full mutation.

Fields that change matches ​

FieldSend
dateOfBirthISO-8601 timestamp. Core checks age rules against this date, not a stored age.
address.stateA State enum such as CALIFORNIA.
education.schoolLevelHIGH_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.degreeA DegreeField such as COMPUTER_INFORMATION_SCIENCES. This is the field of study.
education.degreeTypeBACHELORS, ASSOCIATES, MASTERS, DOCTORAL, CERTIFICATE, GRADUATE_CERTIFICATE, UNDECIDED.
education.gpaOptionA GPA string from dictionaries.gpas.
citizenshipUS_CITIZEN, US_PERMANENT_RESIDENT, US_TEMPORARY_RESIDENT.
ethnicityAFRICAN_AMERICAN, AMERICAN_INDIAN_NATIVE_ALASKAN, ASIAN_PACIFIC_ISLANDER, CAUCASIAN, HISPANIC_LATINO, OTHER.
genderA value from dictionaries.genders.
militaryAffiliationA value from dictionaries.militaryAffiliations.
careerGoalCOMPUTERS_IT_TECHNOLOGY, HEALTH_CARE_NURSING, BUSINESS_MARKETING_MANAGEMENT, TEACHING_EDUCATION, ART_DESIGN_FASHION, LAW_CRIMINAL_JUSTICE, CULINARY_ARTS, BEAUTY_COSMETOLOGY, VOCATIONAL_TECHNICAL, OTHER.

Send education.potentialColleges as the complete list of schools the student is considering. Using the legacy fields collegeName1 through collegeName4 replaces the entire list and clears any slots you omit. For an enrolled student, set education.enrolled to true and send the current school in education.collegeName.

profileCompletion.percentage is Core's profile completeness score. Show it in a progress indicator. The score doesn't identify missing fields. When Core doesn't report a score, percentageOrNull is null. The client can retain the last known value instead of displaying zero.

dictionaries.profilePolicies.minAge specifies the date-of-birth cutoff for the minimum age.

dictionaries.states.requiresSpiConsent identifies states that require consent before collecting citizenship or ethnicity. Saving spiCollect: false clears any citizenship and ethnicity values Core stores 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 set the lower and upper bounds for dateApplied. Sort fields are DATE_APPLIED, DEADLINE, AMOUNT, and STATUS_UPDATED_AT.

Owlflow partner API