Skip to content

Student flow ​

One student, four calls. Signup returns a token, so a brand-new student can skip sign-in. A returning student starts at sign-in. Send Authorization: Bearer <token> on the profile and search calls.

The account is created on the partner selected by Host. See How we identify partners.

Register ​

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

Use one key per signup attempt. Send that same key again if the request times out.

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

Keep token. The student is already signed in.

Sign in ​

Use this when the student comes back. remember extends 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 ​

Matching uses this profile. Send enum values from references.dictionaries, not free 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.

isEligible: true keeps the list to scholarships this profile can win. Add filters to narrow it. search matches the scholarship text. Paginate with after set to the previous pageInfo.endCursor.

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

Other filters on the same input include deadlineBefore, degree, fieldOfStudy, maxRequirements, and requirementTypes (INCLUDE or EXCLUDE). Saved and ignored lists are isSaved: true and isIgnored: true.

Owlflow partner API