Skip to content

Student flow ​

Call auth.createUser to register a new student or auth.login to authenticate a returning student. Both mutations return a JWT. Then call viewer.updateUser to save the profile and scholarships.list to fetch matches.

Send Authorization: Bearer <token> with viewer.updateUser and scholarships.list. Owlflow associates the account with your organization during registration. Partner identification documents that lookup.

Register ​

Header: Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7

Use a new key for each registration attempt. If the request times out, retry it with the same key to avoid creating a duplicate account.

graphql
mutation Signup($input: CreateUserInput!) {
  auth {
    createUser(input: $input) {
      success
      token
      expiresAt
      user {
        id
        email
        firstName
        lastName
      }
      errors {
        code
        field
        message
      }
    }
  }
}
json
{
  "input": {
    "email": "ava@example.com",
    "password": "correct-horse-battery",
    "firstName": "Ava",
    "lastName": "Nguyen"
  }
}

Store the token that Owlflow returns and use it to authenticate subsequent requests. A successful registration signs the student in immediately.

Sign in ​

Call auth.login when a student returns to your site. Set remember to true to extend the session.

graphql
mutation Login($input: LoginInput!) {
  auth {
    login(input: $input) {
      token
      expiresAt
      user {
        id
        email
      }
    }
  }
}
json
{
  "input": {
    "email": "ava@example.com",
    "password": "correct-horse-battery",
    "remember": true
  }
}

Update the profile ​

Owlflow uses the student's profile to determine scholarship eligibility. For enum fields, send values from references.dictionaries rather than display text such as "California" or "senior."

graphql
mutation UpdateProfile($input: UpdateUserInput!) {
  viewer {
    updateUser(input: $input) {
      success
      user {
        firstName
        lastName
        dateOfBirth
        address {
          state
          zip
        }
        education {
          schoolLevel
          gpaOption
          degree
          degreeType
          collegeGraduationYear
        }
        citizenship
        careerGoal
      }
      errors {
        code
        field
        message
      }
    }
  }
}
json
{
  "input": {
    "firstName": "Ava",
    "lastName": "Nguyen",
    "dateOfBirth": "2007-04-12T00:00:00.000Z",
    "phone": "+14155550123",
    "citizenship": "US_CITIZEN",
    "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",
      "collegeGraduationYear": 2031
    }
  }
}

gpaOption is one of the GPA strings from references.dictionaries, including N/A.

Set isEligible to true to return only scholarships that match the student's profile. Combine it with other filters to narrow the results. The search field searches scholarship content. Pass the previous pageInfo.endCursor as after to load the next page.

graphql
query Matches(
  $first: Int!
  $after: String
  $filters: ScholarshipFilters
) {
  scholarships {
    list(filters: $filters, pagination: { first: $first, after: $after }) {
      totalCount
      totalAmount
      pageInfo {
        hasNextPage
        endCursor
      }
      nodes {
        id
        title
        amount
        deadline
        isEasy
        requirementSummary {
          type
          count
          label
        }
      }
    }
  }
}
json
{
  "first": 20,
  "filters": {
    "isEligible": true,
    "isActive": true,
    "capBasedSortEnabled": true,
    "search": "engineering",
    "state": ["CALIFORNIA"],
    "schoolLevel": ["HIGH_SCHOOL_SENIOR"],
    "minAmount": 1000,
    "isEasy": true
  }
}

ScholarshipFilters also accepts deadlineBefore, degree, fieldOfStudy, maxRequirements, and requirementTypes with mode INCLUDE or EXCLUDE. Use isSaved: true for saved scholarships and isIgnored: true for ignored scholarships.

Owlflow partner API