Event types

The six events, and what each one carries.

Subscribe an endpoint to any combination of the six event types below. Everything shown here is the data object — the surrounding envelope is identical for every event.

Event typeFires when
application.submittedA student submits an application, or it is auto-submitted at a deadline.
application.status_changedAn application’s review status changes.
award.createdAn application is awarded.
award.disbursedA disbursement on an award is marked disbursed.
scholarship.createdA scholarship is created.
scholarship.deadline_changedA scholarship’s application deadline changes.

Scholarships are identified as scholarship_id on the scholarship events and as opportunity_id on the application and award events. Both are the same identifier — the one you pass to the REST API’s scholarship endpoints. The two names are historical, and both are kept because renaming either would break existing integrations.

application.submitted

Sent when an application reaches submitted state, whether the student pressed submit or AwardSpring auto-submitted it. is_auto_submit tells you which.

This is the only event that carries applicant contact details inline, so a downstream system can act without a follow-up API call.

{
"application_id": 12345,
"award_cycle_id": 678,
"status": "Submitted",
"is_auto_submit": false,
"submitted_at": "2026-04-03T14:22:30.0000000Z",
"applicant": {
"user_id": 9001,
"first_name": "Ada",
"last_name": "Nunez",
"email": "ada.nunez@example.edu",
"student_id": "STU-44120",
"external_id": "EXT-44120"
}
}
FieldTypeNotes
application_idinteger
award_cycle_idintegerThe cycle the application belongs to.
statusstring
is_auto_submitbooleantrue when AwardSpring submitted it at the deadline rather than the student.
submitted_atstringISO-8601 UTC.
applicant.user_idinteger
applicant.first_namestring, nullable
applicant.last_namestring, nullable
applicant.emailstring, nullable
applicant.student_idstring, nullableThe institution’s student identifier.
applicant.external_idstring, nullableYour own identifier, if one was set.

application.status_changed

Sent when an application’s review status moves — the workflow status a reviewer or administrator advances, such as In Progress to Complete.

This is not the award decision. An application being awarded produces award.created, not a status change. Subscribing to this event expecting award outcomes will miss them.

{
"application_id": 12345,
"opportunity_id": 555,
"user_id": 9001,
"old_status": "In Progress",
"new_status": "Complete"
}
FieldTypeNotes
application_idinteger
opportunity_idintegerThe scholarship.
user_idintegerThe applicant.
old_statusstring, nullableReview status before the change.
new_statusstring, nullableReview status after the change.

Status names are the labels used in the AwardSpring interface. Match on them defensively — an institution’s workflow can introduce values you have not seen.

award.created

Sent when an application’s status becomes awarded.

{
"award_id": "AWARD-2026-00417",
"application_id": 12345,
"opportunity_id": 555,
"user_id": 9001,
"amount": 1000.00,
"awarded_at": "2026-04-11T16:05:12.0000000Z"
}
FieldTypeNotes
award_idstring, nullable
application_idinteger
opportunity_idintegerThe scholarship.
user_idintegerThe recipient.
amountnumber, nullableThe awarded amount. Null when no amount has been set yet.
awarded_atstring, nullableISO-8601 UTC.

award.disbursed

Sent per disbursement, when a disbursement is marked disbursed. An award paid in two terms produces two of these.

{
"award_id": "AWARD-2026-00417",
"application_id": 12345,
"opportunity_id": 555,
"user_id": 9001,
"amount": 500.00,
"disbursement_id": 222,
"disbursement_order": 1,
"disbursed_at": "2026-08-20T09:00:00.0000000Z"
}
FieldTypeNotes
award_idstring, nullable
application_idinteger
opportunity_idintegerThe scholarship.
user_idintegerThe recipient.
amountnumber, nullableThis disbursement’s amount, not the award total.
disbursement_idinteger
disbursement_orderintegerPosition in the disbursement schedule, starting at 1.
disbursed_atstring, nullableISO-8601 UTC.

scholarship.created

{
"scholarship_id": 555,
"name": "Helen Ruiz Memorial Scholarship",
"award_cycle_id": 678,
"deadline": "2026-05-01T00:00:00.0000000Z",
"start_date": "2026-01-15T00:00:00.0000000Z",
"total_amount": 5000.00,
"number_of_awards": 5,
"amount_per_award": 1000.00,
"department_id": 42,
"created_at": "2026-01-05T11:41:03.0000000Z"
}
FieldTypeNotes
scholarship_idinteger
namestring, nullable
award_cycle_idinteger
deadlinestring, nullableApplication deadline, ISO-8601 UTC.
start_datestring, nullableWhen applications open, ISO-8601 UTC.
total_amountnumber, nullable
number_of_awardsinteger, nullable
amount_per_awardnumber, nullable
department_idinteger, nullableNull when the scholarship is not department-scoped.
created_atstring, nullableISO-8601 UTC.

A scholarship is often created before its amounts and dates are filled in, so expect nulls here and read the current state from the REST API when you need it complete.

scholarship.deadline_changed

Sent when the application deadline moves. Useful for anything that has messaged applicants about a date.

{
"scholarship_id": 555,
"name": "Helen Ruiz Memorial Scholarship",
"old_deadline": "2026-05-01T00:00:00.0000000Z",
"new_deadline": "2026-06-15T00:00:00.0000000Z"
}
FieldTypeNotes
scholarship_idinteger
namestring, nullable
old_deadlinestring, nullableISO-8601 UTC. Null if no deadline was set before.
new_deadlinestring, nullableISO-8601 UTC. Null if the deadline was cleared.

Adding fields

New fields can be added to any data object without a change to api_version. A field being added is not a breaking change; parse permissively and ignore what you do not recognise.

Removing a field or changing its meaning is breaking, and would come with a new api_version value and notice to integrators.