Appearance
Scholarships
Every list and detail call is for the signed-in student. Send Authorization: Bearer <token>. Eligibility uses the profile. An empty profile returns a shorter list.
A page of matches
first is the page size. The default is 20. Pass after from the previous page's pageInfo.endCursor while hasNextPage is true. totalCount and totalAmount describe the whole filtered set, not just this 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
}
}This is the matches list scholarships.net shows. amount is the primary award. amounts is the full set of award amounts. awards is how many winners are funded.
capUrgency is critical, warning, or safe, from how close applicationCount is to applicationCap. credibilityLevel is HIGH, MEDIUM, LOW, or VERIFIED.
status is PUBLISHED, EXPIRED, CANCELED, CANCELED_AND_EXPIRED, UNPUBLISHED, or UNPROCESSABLE. An active list is scholarships the student can still apply to.
requirementSummary is enough for a card ("Essay", "2 Documents"). Load viewer.requirements only on the detail page.
Filters
Combine any of these. Omitted filters are not applied.
| 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. |
Saved, ignored, and submitted screens are the same query with a different filter:
json
{ "filters": { "isSaved": true, "isActive": true } }json
{ "filters": { "isIgnored": true } }json
{ "filters": { "isSubmitted": true } }Sort with sort: [{ "field": "DEADLINE", "direction": "ASC" }]. Fields include DEADLINE, AMOUNT, TITLE, CREDIBILITY_SCORE, REQUIREMENT_COUNT, APPLICATION_COUNT, RELEVANCE, and RECOMMENDED. capBasedSortEnabled: true is the default matches order and can be combined with those filters.
A worked search is in the student flow.
One scholarship
Request viewer.requirements here, not on the list. Each entry is the requirement definition plus the student's saved answer, when they have one.
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 is the rule list to show on the page. enumValues is the set of profile values that pass a vocabulary rule. description is the sentence for the student. operator is IN, BETWEEN, GREATER_THAN, LESS_THAN, BOOLEAN, and the other comparisons.
viewer.requirementProgress.progress is 0–100, or null when the scholarship has no requirements. allMandatoryRequirementsCompleted is the flag to treat the application as finished. See Apply.
byId returns null when the id does not exist.
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" }action is SAVE, UNSAVE, IGNORE, UNIGNORE, FAVORITE, or UNFAVORITE. The returned viewer flags are what the lists filter on.
