Webhooks
The REST API is how you ask AwardSpring for data. Webhooks are how AwardSpring tells you something changed, without you polling for it.
When an event occurs — an application is submitted, an award is disbursed — AwardSpring POSTs a signed JSON body to a URL you control.
Webhooks are turned on per institution and configured in the AwardSpring admin site, not through this API. There is no /webhooks endpoint. If you do not see the screen described below, ask your AwardSpring contact to enable webhooks for your institution.
Setting up an endpoint
In AwardSpring, go to Settings → API → Webhooks and add an endpoint. You will need:
An institution can have up to 10 endpoints. Each endpoint gets its own signing secret, shown once on creation and beginning with whsec_.
An endpoint can be made inactive at any time. An inactive endpoint receives nothing, and so does every endpoint at an institution whose Webhooks setting has been switched off — the setting gates delivery itself, not just the admin screens.
The envelope
Every delivery has the same outer shape. Only data differs by event type.
A test send carries an extra "is_test": true alongside api_version. Real events never carry it.
Note that data uses snake_case, matching the REST API. Identifiers inside it are raw integers, again matching the REST API — "application_id": 12345, not "app_12345".
Headers on every delivery
What your endpoint must do
- Verify the signature. An unverified endpoint accepts anything anyone posts at it.
- Respond
2xxquickly. AwardSpring gives up on a delivery after 10 seconds and treats it as failed. Queue the work; do not do it inline. - Tolerate duplicates. A retry after a timeout, a manual replay, or a network failure can deliver the same
idmore than once. Treatidas an idempotency key on your side. - Tolerate new fields. Fields get added to
datawithout a version change. Ignore what you do not recognise rather than rejecting the payload.
Ordering is not guaranteed. Each endpoint’s deliveries are independent, and a retried event can arrive after a later one. If order matters, sort on occurred_at rather than on arrival.
Where to go next
- Verifying signatures — the HMAC scheme, and rotating a secret without downtime.
- Delivery and retries — the retry schedule, what happens when an endpoint stays down, and how to replay.
- Event types — the
datapayload for each event.