Skip to navigation

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.

Identifiers

Every record identifier in a payload is the record’s stored ID: a 9-character string such as "S6H4B9VQE", the same value the REST API returns as that record’s id and accepts wherever it takes one, so an ID from a webhook can be passed straight to the matching endpoint. The envelope’s tenant_id is your institution’s stored ID in the same format.

FieldIdentifies
scholarship_id, opportunity_idA scholarship.
award_cycle_idAn award cycle.
department_idA department.
user_id, applicant.user_idA student.
award_idAn award.
application_id on application.submittedThe student’s general application.
application_id on every other eventThe student’s application to one scholarship.
disbursement_idOne payment of an award.

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.

An award is a scholarship application that was awarded, so an award’s award_id is the same stored ID as its application_id. The award’s existing 8-character award code is sent, unchanged, as award_code.

Identifiers used to be raw integers. A replay of an event recorded before the switch to stored IDs is rebuilt with stored IDs when AwardSpring still holds the event’s trigger. An event recorded before replays could be rebuilt has no stored trigger, and its replay resends the payload exactly as it was first sent, with integer IDs, including an integer tenant_id.

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": "A7K2M9QXR",
"award_cycle_id": "C4T8N2WHP",
"status": "Submitted",
"is_auto_submit": false,
"submitted_at": "2026-04-03T14:22:30.0000000Z",
"applicant": {
"user_id": "U9F3K7PZM",
"first_name": "Ada",
"last_name": "Nunez",
"email": "ada.nunez@example.edu",
"student_id": "STU-44120",
"external_id": "EXT-44120"
}
}
FieldTypeNotes
application_idstringThe student’s general application for the cycle.
award_cycle_idstringThe 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_idstringThe applicant.
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": "R2X8D5MKT",
"opportunity_id": "S6H4B9VQE",
"user_id": "U9F3K7PZM",
"old_status": "In Progress",
"new_status": "Complete"
}
FieldTypeNotes
application_idstringThe application to this scholarship.
opportunity_idstringThe scholarship.
user_idstringThe 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": "R2X8D5MKT",
"award_code": "K7Q2M4XA",
"application_id": "R2X8D5MKT",
"opportunity_id": "S6H4B9VQE",
"user_id": "U9F3K7PZM",
"amount": 1000.00,
"awarded_at": "2026-04-11T16:05:12.0000000Z"
}
FieldTypeNotes
award_idstringThe award. The same stored ID as application_id.
award_codestring, nullableThe award’s 8-character code. Null when no code has been assigned.
application_idstringThe awarded application.
opportunity_idstringThe scholarship.
user_idstringThe 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": "R2X8D5MKT",
"award_code": "K7Q2M4XA",
"application_id": "R2X8D5MKT",
"opportunity_id": "S6H4B9VQE",
"user_id": "U9F3K7PZM",
"amount": 1000.00,
"amount_paid_out": 500.00,
"disbursement_id": "D3W7J5NRY",
"disbursement_order": 1,
"disbursed_at": "2026-08-20T09:00:00.0000000Z"
}
FieldTypeNotes
award_idstringThe award. The same stored ID as application_id.
award_codestring, nullableThe award’s 8-character code. Null when no code has been assigned.
application_idstringThe awarded application.
opportunity_idstringThe scholarship.
user_idstringThe recipient.
amountnumber, nullableThe full award amount, the same on every disbursement of the award.
amount_paid_outnumber, nullableThis disbursement’s amount: the amount recorded for this payment, or, when none was recorded, the award split evenly across the scholarship’s payments per award.
disbursement_idstringThis payment.
disbursement_orderintegerPosition in the disbursement schedule, starting at 1.
disbursed_atstring, nullableISO-8601 UTC.

scholarship.created

{
"scholarship_id": "S6H4B9VQE",
"name": "Helen Ruiz Memorial Scholarship",
"award_cycle_id": "C4T8N2WHP",
"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": "P8E2G6TCK",
"created_at": "2026-01-05T11:41:03.0000000Z"
}
FieldTypeNotes
scholarship_idstring
namestring, nullable
award_cycle_idstring
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_idstring, 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": "S6H4B9VQE",
"name": "Helen Ruiz Memorial Scholarship",
"old_deadline": "2026-05-01T00:00:00.0000000Z",
"new_deadline": "2026-06-15T00:00:00.0000000Z"
}
FieldTypeNotes
scholarship_idstring
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.