Overview
Webhooks are one of the actions available to a FUYL automation. This article explains what a webhook is, how to configure the webhook action, how to receive and act on one, and the exact payload sent for every event.
What is a webhook?
A webhook is a way for one system to inform another of an event or change. The message is sent as an HTTP POST request and carries a small bundle of information in a predictably structured format as the body (JSON). It describes exactly what happened, for example, which device was loaned, when, by whom, and at which site. A receiving service might read that information and can be configured to act differently according to the contents, such as logging a record, opening a ticket, sending a notification, or posting a message to a chat channel.
The administrator decides both which events trigger a webhook and where the message is sent. FUYL.io sends it, and the service at the other end decides what to do with it.
Configure the webhook action
When adding the action to an automation (step 6 of Configure an automation), select Webhooks as the action Type, then complete the webhook-specific settings:
- Enter the Endpoint URL, the destination address that FUYL should send the request to. This is provided by the receiving service (see Receiving and acting on webhooks below).
-
Optionally select an Authentication method to match the receiving service's configuration:
Authentication methods None No credentials are included. Basic Sends a username and password with each request. Bearer Sends a token with each request. - Optionally, add one or more Custom headers (a key and value per row) if the receiving service requires extra information in the request (such as an API key).
Receiving and acting on webhooks
FUYL.io can be configured to initiate an automation (e.g. send a webhook), but another service must be configured to receive it and act accordingly. Writing a custom service to do this is one option, but it's rarely necessary. Most organizations already run one or more workflow automation tools (sometimes called integration platforms or iPaaS) that can accept an incoming webhook and turn it into an action without code, such as sending an email, posting to a chat channel, updating a spreadsheet, or raising a ticket.
Before building anything new, it is worth checking what is already in use across the organization. Common tools include:
- Microsoft Power Automate: often already available with Microsoft 365, and well suited to organizations using Teams, Outlook, and SharePoint.
- Zapier: a widely used cloud-hosted tool that connects to thousands of apps natively.
- n8n: an open-source tool that can be self or cloud-hosted, with similar 3rd party integrations to Zapier.
- IFTTT: a simple option for lightweight, single-step reactions.
- Google Apps Script: a good fit for organizations working in Google Workspace (Gmail, Sheets, Chat), though this requires some code knowledge.
The general approach is the same whichever tool is chosen: create a flow that starts with an incoming webhook (or “HTTP request" trigger) step, copy the URL it provides, and paste that into the Endpoint URL field when configuring the FUYL automation. From there, the tool reads the fields in the payload (see Webhook events and payload formats below) and can use them to perform whatever action is required.
Source IP addresses
FUYL always sends webhook requests from the same two outbound IP addresses. If the receiving service sits behind a firewall or IP allowlist, add both addresses so the requests are not blocked. This is generally not necessary for cloud-hosted services (such as Zapier or Power Automate).
| Address |
|---|
| 35.84.160.102 |
| 44.240.25.20 |
Webhook events and payload formats
Each webhook payload shares the same outer shape: a timestamp (when the webhook was sent), an eventType (which event fired), and a data object containing the details specific to that event.
The events are grouped below by the trigger type selected in the FUYL.io interface.
Two kinds of field warrant particular care:
- An optional field may be absent from the payload entirely. Check that it exists before reading it.
- A nullable field is always present but may have
nullin place of a value.
A field can be both (present as null, or missing altogether), so any process that consumes a payload should handle both cases defensively. The optional and nullable fields for each event are noted beneath its sample below.
Device deployments
Deployment created
{
"timestamp": "2026-06-26T07:57:43.024Z",
"eventType": "deployment.created",
"data": {
"id": "fe5c5e07-d463-46c9-9fe4-176e541466a2",
"workflow": { "id": "5475f8fc-e249-442b-bb11-fd0c51b881f8", "name": "Deployments" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"device": { "id": "D567890", "model": null, "serialNumber": null },
"assignedAt": "2026-06-26T07:57:40.352Z"
}
}Optional or nullable fields: kiosk and site are nullable (null for a deployment not tied to a specific locker or site). device is nullable, and when it is present its model and serialNumber are each nullable. user.email is nullable (null when no email is on record).
Note: a deployment may also be created without a site or kiosk/group specified. If the workflow allows self-service and no deployment is planned for the user, a deployment created and device deployed will trigger simultaneously.
Device deployed
{
"timestamp": "2026-06-26T07:57:43.038Z",
"eventType": "deployment.device_deployed",
"data": {
"id": "fe5c5e07-d463-46c9-9fe4-176e541466a2",
"workflow": { "id": "5475f8fc-e249-442b-bb11-fd0c51b881f8", "name": "Deployments" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"device": { "id": "D567890", "model": null, "serialNumber": null },
"deployedAt": "2026-06-26T07:57:40.352Z"
}
}Nullable fields: within device, model and serialNumber are each nullable. user.email is nullable (null when no email is on record).
Low deployment devices
Triggers when the number of available devices for a deployment workflow falls to or below the configured threshold.
{
"timestamp": "2026-06-26T07:57:44.343Z",
"eventType": "deployment.devices_low",
"data": {
"workflow": { "id": "5475f8fc-e249-442b-bb11-fd0c51b881f8", "name": "Deployments" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"threshold": 2,
"numAvailableDevices": 0
}
}Nullable fields: site.id and site.name are each nullable, both are null when the low-stock threshold applies across all sites rather than a single one.
Device loaning
Loan started
Triggers when a user borrows a device.
{
"timestamp": "2026-06-26T07:54:42.856Z",
"eventType": "loan.created",
"data": {
"id": "f6a51db7-c127-4b73-a217-9fa2b8dc51f7",
"workflow": { "id": "6dbe82d4-b44c-4eca-a399-e211348b7bff", "name": "Laptop Loans" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "8db98cd5-0899-4ca1-8474-05da3d077b0b", "name": "Jane Smith", "email": "jane.smith@example.com" },
"deviceId": "D987654321",
"startedAt": "2026-06-26T07:54:40.583Z",
"expectedReturnDateTime": "2026-06-27T06:00:00.000Z"
}
}Optional or nullable fields: expectedReturnDateTime is optional and is omitted for loans that have no scheduled due date/time. user.email is nullable (null when no email is on record).
Loan ended
Triggers when a borrowed device is returned or a loan is manually ended.
{
"timestamp": "2026-06-26T07:55:05.926Z",
"eventType": "loan.completed",
"data": {
"id": "f6a51db7-c127-4b73-a217-9fa2b8dc51f7",
"workflow": { "id": "6dbe82d4-b44c-4eca-a399-e211348b7bff", "name": "Laptop Loans" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "8db98cd5-0899-4ca1-8474-05da3d077b0b", "name": "Jane Smith", "email": "jane.smith@example.com" },
"deviceId": "D987654321",
"startedAt": "2026-06-26T07:54:40.583Z",
"endedAt": "2026-06-26T07:55:05.569Z",
"expectedReturnDateTime": "2026-06-27T06:00:00.000Z"
}
}Optional or nullable fields: expectedReturnDateTime is optional and is omitted for loans that had no scheduled due date/time. user.email is nullable (null when no email is on record).
Loan device damaged
Triggers when a returned loan device is reported as damaged. Requires condition reports to be enabled on the workflow.
{
"timestamp": "2026-06-26T07:55:06.110Z",
"eventType": "loan.device_damaged",
"data": {
"id": "f6a51db7-c127-4b73-a217-9fa2b8dc51f7",
"workflow": { "id": "6dbe82d4-b44c-4eca-a399-e211348b7bff", "name": "Laptop Loans" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "8db98cd5-0899-4ca1-8474-05da3d077b0b", "name": "Jane Smith", "email": "jane.smith@example.com" },
"deviceId": "D987654321",
"deviceCondition": { "description": null, "type": "other" },
"startedAt": "2026-06-26T07:54:40.583Z",
"endedAt": "2026-06-26T07:55:05.569Z",
"expectedReturnDateTime": "2026-06-27T06:00:00.000Z"
}
}Optional or nullable fields: expectedReturnDateTime is optional. Within deviceCondition, description is both optional and nullable, it may be absent, or present as null when no free-text description was supplied (as in the sample above). deviceCondition.type is always present. user.email is nullable (null when no email is on record).
Loan ended not plugged in
Triggers when a borrowed device is returned but not detected. Requires unplugged device detection to be enabled.
{
"timestamp": "2026-06-26T07:55:06.050Z",
"eventType": "loan.device_unplugged",
"data": {
"id": "f6a51db7-c127-4b73-a217-9fa2b8dc51f7",
"workflow": { "id": "6dbe82d4-b44c-4eca-a399-e211348b7bff", "name": "Laptop Loans" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "8db98cd5-0899-4ca1-8474-05da3d077b0b", "name": "Jane Smith", "email": "jane.smith@example.com" },
"deviceId": "D987654321",
"startedAt": "2026-06-26T07:54:40.583Z",
"expectedReturnDateTime": "2026-06-27T06:00:00.000Z",
"endedAt": "2026-06-26T07:55:05.569Z",
"bayId": "6f2a9c4d-1e88-4b7a-9d21-0c3e5f7a1b42"
}
}Optional or nullable fields: expectedReturnDateTime is optional. user.email is nullable (null when no email is on record).
Loan overdue
Triggers when a loaned device becomes overdue.
{
"timestamp": "2026-06-27T06:00:10.000Z",
"eventType": "loan.overdue",
"data": {
"id": "f6a51db7-c127-4b73-a217-9fa2b8dc51f7",
"workflow": { "id": "6dbe82d4-b44c-4eca-a399-e211348b7bff", "name": "Laptop Loans" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "8db98cd5-0899-4ca1-8474-05da3d077b0b", "name": "Jane Smith", "email": "jane.smith@example.com" },
"deviceId": "D987654321",
"startedAt": "2026-06-26T07:54:40.583Z",
"expectedReturnDateTime": "2026-06-27T06:00:00.000Z"
}
}Note: expectedReturnDateTime is always present for this type of event, as an overdue loan must have a due date/time to be measured against. user.email is nullable (null when no email is on record).
Loan reminder
Triggers ahead of a loan's expected return time, as an advance reminder that the device is due back soon.
{
"timestamp": "2026-06-27T04:00:00.000Z",
"eventType": "loan.reminder",
"data": {
"id": "f6a51db7-c127-4b73-a217-9fa2b8dc51f7",
"workflow": { "id": "6dbe82d4-b44c-4eca-a399-e211348b7bff", "name": "Laptop Loans" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "8db98cd5-0899-4ca1-8474-05da3d077b0b", "name": "Jane Smith", "email": "jane.smith@example.com" },
"deviceId": "D987654321",
"startedAt": "2026-06-26T07:54:40.583Z",
"expectedReturnDateTime": "2026-06-27T06:00:00.000Z"
}
}Note: expectedReturnDateTime is always present for this type of event, as a reminder can only be scheduled relative to a loan's due date/time. user.email is nullable (null when no email is on record).
No loan devices
Triggers when a loan workflow has no available devices left to loan.
{
"timestamp": "2026-06-26T07:54:43.000Z",
"eventType": "loan.devices_exhausted",
"data": {
"workflow": { "id": "6dbe82d4-b44c-4eca-a399-e211348b7bff", "name": "Laptop Loans" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" }
}
}Nullable fields: site.id and site.name are each nullable, and are null when the workflow spans all sites. This event carries no user.
Device repairs
User dropped off repair
{
"timestamp": "2026-06-26T07:55:50.773Z",
"eventType": "repair.user_dropoff",
"data": {
"id": "ae6fbbb0-4a08-4a02-8928-020e141b8d56",
"workflow": { "id": "88dd5b09-d544-48dc-b2f3-4aa8c77ddb6c", "name": "Staff Repairs" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"deviceId": "D123456",
"type": "for-admin",
"droppedOffAt": "2026-06-26T07:55:48.500Z",
"dropoffReason": { "description": "Will not power on", "type": "no-power" }
}
}Optional or nullable fields: deviceId is optional. site.id and site.name are each nullable. dropoffReason is optional, and within it description is optional (dropoffReason.type is present whenever dropoffReason is). user.email is nullable (null when no email is on record).
Admin picked up repair
Triggers when an administrator collects a device to be repaired.
{
"timestamp": "2026-06-26T07:56:36.179Z",
"eventType": "repair.admin_pickup",
"data": {
"id": "ae6fbbb0-4a08-4a02-8928-020e141b8d56",
"workflow": { "id": "88dd5b09-d544-48dc-b2f3-4aa8c77ddb6c", "name": "Staff Repairs" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"deviceId": "D123456",
"type": "for-admin",
"collectedAt": "2026-06-26T07:56:35.553Z"
}
}Optional or nullable fields: deviceId is optional. site.id and site.name are each nullable. user.email is nullable (null when no email is on record).
Admin dropped off repair
Triggers when an administrator returns a repaired device to be collected.
{
"timestamp": "2026-06-26T07:57:00.473Z",
"eventType": "repair.admin_dropoff",
"data": {
"id": "d3f3a628-25a2-42e4-8557-93880cf954fb",
"workflow": { "id": "88dd5b09-d544-48dc-b2f3-4aa8c77ddb6c", "name": "Staff Repairs" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"deviceId": "D123456",
"type": "for-user",
"droppedOffAt": "2026-06-26T07:56:59.702Z"
}
}Optional or nullable fields: deviceId is optional. site.id and site.name are each nullable. user.email is nullable (null when no email is on record).
User picked up repair
Triggered when a user collects their repaired device.
{
"timestamp": "2026-06-26T07:57:18.323Z",
"eventType": "repair.user_pickup",
"data": {
"id": "d3f3a628-25a2-42e4-8557-93880cf954fb",
"workflow": { "id": "88dd5b09-d544-48dc-b2f3-4aa8c77ddb6c", "name": "Staff Repairs" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"deviceId": "D123456",
"type": "for-user",
"collectedAt": "2026-06-26T07:57:17.565Z"
}
}Optional or nullable fields: deviceId is optional. site.id and site.name are each nullable. user.email is nullable (null when no email is on record).
Secure charging
Charging session started
{
"timestamp": "2026-06-26T07:53:04.952Z",
"eventType": "charging_session.created",
"data": {
"id": "dd6a05d5-a620-4433-a09c-6ff5dd54d428",
"workflow": { "id": "5cfc306f-f466-44a2-a179-cc5fcb2c03be", "name": "Staff Charging" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"startedAt": "2026-06-26T07:53:02.919Z"
}
}Nullable fields: user.email is nullable (null when no email is on record).
Charging session ended
Fires when a user collects their charging device, or the session is ended manually.
{
"timestamp": "2026-06-26T07:53:18.697Z",
"eventType": "charging_session.completed",
"data": {
"id": "dd6a05d5-a620-4433-a09c-6ff5dd54d428",
"workflow": { "id": "5cfc306f-f466-44a2-a179-cc5fcb2c03be", "name": "Staff Charging" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"startedAt": "2026-06-26T07:53:02.919Z",
"endedAt": "2026-06-26T07:53:18.476Z"
}
}Nullable fields: user.email is nullable (null when no email is on record).
Charging session prolonged
Fires when an active charging session is prolonged (extended beyond its original end).
{
"timestamp": "2026-06-26T07:53:40.000Z",
"eventType": "charging_session.prolonged",
"data": {
"id": "dd6a05d5-a620-4433-a09c-6ff5dd54d428",
"workflow": { "id": "5cfc306f-f466-44a2-a179-cc5fcb2c03be", "name": "Staff Charging" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"startedAt": "2026-06-26T07:53:02.919Z"
}
}Nullable fields: user.email is nullable (null when no email is on record).
Single use
Single use pick up created
Triggers when an admin prepares for a user to pick up an item (either on FUYL.io or when loading at the Kiosk).
{
"timestamp": "2026-06-26T07:59:12.729Z",
"eventType": "single_use_task.pickup_created",
"data": {
"id": "c1f2bd18-f040-4472-85fc-598f0eb49c03",
"workflow": { "id": "cabe3155-f09b-4740-9847-b1f77644695a", "name": "Grab 'n Go" },
"kiosk": null,
"site": null,
"user": { "id": "8db98cd5-0899-4ca1-8474-05da3d077b0b", "name": "Jane Smith", "email": "jane.smith@example.com" },
"type": "pickup",
"description": "Spare charger collection",
"createdAt": "2026-06-26T07:59:09.526Z",
"loadedBy": null,
"loadedAt": null
}
}Nullable fields: kiosk, site, loadedBy and loadedAt are each nullable, they are null until an admin loads the bay (as in the sample above). user.email is nullable (null when no email is on record).
Single use pick up completed
{
"timestamp": "2026-06-26T08:01:58.539Z",
"eventType": "single_use_task.pickup_completed",
"data": {
"id": "c1f2bd18-f040-4472-85fc-598f0eb49c03",
"workflow": { "id": "cabe3155-f09b-4740-9847-b1f77644695a", "name": "Grab 'n Go" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "8db98cd5-0899-4ca1-8474-05da3d077b0b", "name": "Jane Smith", "email": "jane.smith@example.com" },
"type": "pickup",
"description": "Spare charger collection",
"createdAt": "2026-06-26T07:59:09.526Z",
"loadedBy": { "id": "3a5b428f-e7c0-4d15-8904-628655f1e632", "name": "Alex Admin", "email": "alex.admin@example.com" },
"loadedAt": "2026-06-26T08:01:41.334Z",
"pickedUpAt": "2026-06-26T08:01:57.824Z"
}
}Nullable fields: user.email is nullable (null when no email is on record).
Single use drop off created
Triggers when an admin prepares for a user to drop off an item (either on FUYL.io or at the Kiosk).
{
"timestamp": "2026-06-26T07:59:25.487Z",
"eventType": "single_use_task.dropoff_created",
"data": {
"id": "10ad1e49-0b89-48ab-ad05-bf1ce467b69c",
"type": "dropoff",
"workflow": { "id": "cabe3155-f09b-4740-9847-b1f77644695a", "name": "Grab 'n Go" },
"kiosk": null,
"site": null,
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"description": "Return of accessory",
"createdAt": "2026-06-26T07:59:25.027Z"
}
}Nullable fields: kiosk and site are each nullable until the drop-off is completed at a locker. user.email is nullable (null when no email is on record).
Single use drop off completed
Triggers when a user deposits an item.
{
"timestamp": "2026-06-26T07:59:58.946Z",
"eventType": "single_use_task.dropoff_completed",
"data": {
"id": "10ad1e49-0b89-48ab-ad05-bf1ce467b69c",
"workflow": { "id": "cabe3155-f09b-4740-9847-b1f77644695a", "name": "Grab 'n Go" },
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" },
"user": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"type": "dropoff",
"description": "Return of accessory",
"createdAt": "2026-06-26T07:59:25.027Z",
"loadedBy": { "id": "dd0a727b-ce56-4843-b365-393de7b58f85", "name": "John Davis", "email": "john.davis@example.com" },
"loadedAt": "2026-06-26T07:59:58.429Z"
}
}Nullable fields: user.email is nullable (null when no email is on record).
Stations
Station inoperational
Triggers when a Locker cannot contact FUYL.io.
{
"timestamp": "2026-06-26T08:25:23.422Z",
"eventType": "station.inoperational",
"data": {
"timestamp": "2026-06-26T08:25:21.901Z",
"stationId": "S-00:11:22:33:44:55-00000000ff56fcd1",
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" }
}
}Station Operational
Triggers when a Locker contacts or regains contact with FUYL.io
{
"timestamp": "2026-06-26T08:27:23.422Z",
"eventType": "station.operational",
"data": {
"timestamp": "2026-06-26T08:27:21.901Z",
"stationId": "S-00:11:22:33:44:55-00000000ff56fcd1",
"kiosk": { "id": "c1b3dbb7-b88f-49f4-b61b-3efdee3e6d16", "name": "Locker 01" },
"site": { "id": "1ac33a6b-d3c1-4357-9473-575dda4136da", "name": "Main Campus" }
}
}Where to go next
Put these events to work:
Automations - How to create and manage an automation from start to finish.
Automation examples & inspiration - Ideas for what to build with these events, as suggested and demonstrated by other FUYL organizations.