Webhook events
Every field RamenID sends to your webhook, and the headers on each request.
How to set up and verify webhooks is in the Webhooks guide. This page is the field reference.
Headers
FieldDescription
RamenID-Signaturestring
t=<unix seconds>,v1=<hex HMAC-SHA256 of "{t}.{raw body}"> keyed with your signing secret.
Content-Typestring
application/json
User-Agentstring
RamenID-Webhooks/1
Envelope
FieldDescription
idstring (UUID)
Unique per event. The same on every retry, so use it to ignore duplicates.
type"student.verified" | "discount.minted"
What happened.
created_atstring
When the event was created, ISO 8601 UTC.
dataobject
Details, below.
data
FieldDescription
verification_idstring (UUID)
The verification this event is about.
link_idstring (UUID) | null
The API link's id, matching the id from Create a link. null for rule links and your workspace page.
emailstring
The verified email, lowercased, with plus addressing removed (ana+x@mit.edu becomes ana@mit.edu).
domainstring
The school domain that matched, like mit.edu. For a subdomain address this is the matched parent domain.
institutionstring | null
The school's name when we know it.
product_namestring | null
The rule's product when the verification started. null for verification only.
couponobject | null
Set on discount.minted, null on student.verified.
coupon.codestring
The single-use code.
coupon.percent_offnumber
Percent off, as the code was created. Editing the rule later does not change it.
coupon.expires_atstring | null
When the code stops working.
coupon.checkout_urlstring | null
Checkout with the code applied, when available.
student.verified
Sent when a verification-only flow finishes: your workspace page, or an API link set to verification only.
{
"id": "2b7c1f4e-8a3d-4e6b-9c2f-5d1a0e8b7c63",
"type": "student.verified",
"created_at": "2026-10-19T18:02:11.000Z",
"data": {
"verification_id": "1f7a9c3e-5b2d-4e8f-a6c1-7d3b9e2f4a10",
"link_id": "4b8f0c2e-7d1a-4c3b-9e2f-1a6d5c8b7e90",
"email": "ana@mit.edu",
"domain": "mit.edu",
"institution": "Massachusetts Institute of Technology",
"product_name": null,
"coupon": null
}
}discount.minted
Sent when a student gets a discount code. On a rule link, only when a new code is created. On an API link, every time the link is completed, including when a returning student gets their existing code.
{
"id": "9d2c4e1a-3b5f-4a7e-8c6d-2f1e0b9a8c7d",
"type": "discount.minted",
"created_at": "2026-10-19T18:02:11.000Z",
"data": {
"verification_id": "1f7a9c3e-5b2d-4e8f-a6c1-7d3b9e2f4a10",
"link_id": null,
"email": "ana@mit.edu",
"domain": "mit.edu",
"institution": "Massachusetts Institute of Technology",
"product_name": "Notebook Pro",
"coupon": {
"code": "STUK7M2QX",
"percent_off": 40,
"expires_at": "2026-10-26T18:02:11.000Z",
"checkout_url": "https://buy.stripe.com/test_123?prefilled_promo_code=STUK7M2QX"
}
}
}Not sent
There are no events for a code being redeemed (RamenID cannot see your checkouts), for a link expiring, or for failed attempts. Check your provider for redemptions, and Get a link for link status.