Appearance
Scholarships
Call scholarships.list to fetch matches and scholarships.byId to load one scholarship. Send Authorization: Bearer <token> with both queries. Owlflow calculates eligibility from the student's profile.
A page of matches
Use first to set the page size; the default is 20. While pageInfo.hasNextPage is true, pass the previous response's pageInfo.endCursor as after. The totalCount and totalAmount fields describe all scholarships that match the filters, not only the current 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
amounts
awards
deadline
status
isEasy
applicationCap
applicationCount
capUrgency
credibilityScore
credibilityLevel
requirementSummary { type count label }
organization { id name }
provider { name }
viewer { isEligible isSaved isIgnored isFavorite }
}
}
}
}json
{
"first": 20,
"filters": {
"isEligible": true,
"isActive": true,
"capBasedSortEnabled": true
}
}scholarships.list returns the matching data that scholarships.net uses. amount is the primary award. amounts contains every award amount. awards reports how many winners the scholarship funds.
The capUrgency field is critical, warning, or safe, based on how close applicationCount is to applicationCap. The credibilityLevel field is HIGH, MEDIUM, LOW, or VERIFIED.
The status field is PUBLISHED, EXPIRED, CANCELED, CANCELED_AND_EXPIRED, UNPUBLISHED, or UNPROCESSABLE. Filter by isActive: true to return scholarships that are still accepting applications.
Use requirementSummary to display concise labels such as "Essay" or "2 Documents" on a scholarship card. Request the full viewer.requirements collection only when loading the detail page.
Filters
Combine any of these filters. Owlflow ignores omitted filters.
| Filter | Use it for |
|---|---|
isEligible | Scholarships this profile qualifies for. |
isActive | Still open. |
isEasy | Few requirements. |
search | Text match on the scholarship. |
state | State codes, such as ["CALIFORNIA"]. |
schoolLevel | Same school-level values as the profile. |
degree, fieldOfStudy | Degree and field of study values. |
gender, ethnicity, militaryAffiliation | Profile enum values. |
gpa | { "min": 3, "max": 4 }. |
age | { "min": 17, "max": 24 }. |
minAmount, maxAmount | Award size. |
deadlineAfter, deadlineBefore | ISO-8601 timestamps. |
categories | Category names. |
credibilityLevel | HIGH, MEDIUM, LOW, VERIFIED. |
minCredibilityScore | Numeric credibility floor. |
maxRequirements | Hide scholarships with more requirements than this. |
requirementTypes | { "mode": "INCLUDE", "types": ["SURVEY"] } or EXCLUDE. Types are INPUT, TEXT, SURVEY, SPECIAL_ELIGIBILITY, FILE, IMAGE, GOAL. |
isSaved, isIgnored, isFavorite | Lists the student marked. |
isStarted, isSubmitted, hasApplication | Application progress. |
isSeen | Whether the student has opened it. |
organizationId | Limit to providers you already know. |
Use scholarships.list with isSaved, isIgnored, or isSubmitted to build these views:
json
{ "filters": { "isSaved": true, "isActive": true } }json
{ "filters": { "isIgnored": true } }json
{ "filters": { "isSubmitted": true } }Sort with sort: [{ "field": "DEADLINE", "direction": "ASC" }]. The sort.field values are DEADLINE, AMOUNT, TITLE, CREDIBILITY_SCORE, REQUIREMENT_COUNT, APPLICATION_COUNT, RELEVANCE, and RECOMMENDED. Set capBasedSortEnabled: true to apply the default matches order.
See the student flow for a complete search example.
One scholarship
Request viewer.requirements on the detail page rather than in the list. Each entry contains requirement and, when the student has saved an answer, applicationRequirement.
graphql
query ScholarshipDetail($id: ID!) {
scholarships {
byId(id: $id) {
id
title
amount
amounts
awards
deadline
startDate
description
shortDescription
status
isEasy
applicationCap
applicationCount
capUrgency
credibilityScore
credibilityLevel
payoutMethod
url
termsOfServiceUrl
winnerAnnouncementDate
organization { id name website logoUrl }
provider { name website logoUrl }
eligibilities { id field { name } operator value enumValues description isOptional }
viewer {
isEligible
isSaved
isIgnored
isFavorite
hasApplication
hasSubmitted
allMandatoryRequirementsCompleted
requirementProgress { completed progress }
application { id dateApplied }
requirements {
id
requirement {
id
type
name
title
description
isOptional
... on RequirementText {
minWords
maxWords
minCharacters
maxCharacters
allowFile
allowedExtensions
maxFileSize
essayTopics { id topic }
}
... on RequirementInput { description config value }
... on RequirementFile { allowedExtensions maxFileSize fileType }
... on RequirementImage {
allowedFormats
maxFileSize
minWidth
maxWidth
minHeight
maxHeight
}
... on RequirementSurvey {
questions { id text description type required options { label value } }
}
... on RequirementGoal { link variant }
... on RequirementSpecialEligibility { specialEligibilityValue }
}
applicationRequirement {
id
... on ApplicationText { text }
... on ApplicationInput { text }
... on ApplicationSurvey { answers { questionId options } }
... on ApplicationFile { file { name originalName } }
... on ApplicationImage { file { name originalName } }
... on ApplicationGoal { payload }
... on ApplicationSpecialEligibility { specialEligibilityValue }
}
}
}
}
}
}eligibilities contains the qualification rules. Display description to the student. For enum rules, enumValues lists the profile values that pass. operator tells you how Core evaluates the rule: IN, BETWEEN, GREATER_THAN, LESS_THAN, BOOLEAN, or another supported comparison.
viewer.requirementProgress.progress ranges from 0 to 100 and is null when the scholarship has no requirements. Treat the application as complete when allMandatoryRequirementsCompleted is true. See Apply.
scholarships.byId returns null when Owlflow finds no scholarship for the supplied ID.
Save, ignore, favorite
graphql
mutation UpdateStatus($scholarshipId: ID!, $action: ScholarshipAction!) {
scholarships {
updateStatusV2(action: $action, scholarshipId: $scholarshipId) {
scholarship {
id
viewer { isSaved isIgnored isFavorite }
}
}
}
}json
{ "scholarshipId": "12345", "action": "SAVE" }Set action to SAVE, UNSAVE, IGNORE, UNIGNORE, FAVORITE, or UNFAVORITE. Owlflow returns the updated viewer flags. Use them to update the interface and filter later list queries.
