In this tutorial, we’ll walk through how to build an NFC wristband scanning system using Oveit’s Tickets API. By the end, you’ll know how to scan a guest’s wristband, retrieve the tickets stored in their digital wallet, and access the guest form data associated with each ticket. This flow is the foundation for check-ins, attendee verification, and enhancing the event experience.
0) Prereqs #
- Get an API token (Bearer) from Oveit. All requests below require it. Tickets API documentation
- Ensure the wristband’s RFID has been paired with a ticket in Oveit (Scanning & Pairing app or API). RFID documentation
1) Read the wristband via NFC and call scan_v2
#
When your app gets the NFC tag (the wearable code), call:
POST https://l.oveit.com/api/tickets/scan_v2
Body: { "rfid_code": "ABCD1234" }
Headers: Authorization: Bearer <TOKEN>, Content-Type: application/json
- This returns the wallet: an array of tickets on that wristband (with each ticket’s code, event name, and whether it was checked in) and a
wearables
section with the wristband code and wallet creation date.
Example response:
200 OK
{
"message": "Tickets scanned successfully",
"data": {
"tickets": [
{
"code": "fdc5e169",
"event": “Your event name”,
"checkedInAt": null, // it means the ticket has not been checked-in yet
"name": “Child (Aug 27, 2025)"
},
{
"code": "4ba6b9f6",
"event": "Your event name",
"checkedInAt": "Aug 26, 2025 at 11:52",
"name": “Adult (Aug 27, 2025)"
}
],
"wearables": [
{
"code": "5E35ED9A",
"date": "2025-08-26T11:54:57+03:00", // wallet creation date
"date_formatted": "Aug 26, 2025, at 11:54"
}
]
}
}
Example (fetch) #
const res = await fetch("https://l.oveit.com/api/tickets/scan_v2", {
method: "POST",
headers: {
"Authorization": `Bearer ${OVEIT_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ rfid_code: wearableCode })
});
const { data } = await res.json();
// data.tickets -> list of tickets in the wallet
2) Get the guest form for a specific ticket (endpoint 2) #
To retrieve the guest / registration form (fields + values) for a ticket, call /api/tickets/scan
(not scan_v2
). This endpoint returns the same structure as checkin
, including the attendee
object with form field definitions and values. You may supply either the ticket_code
or the same rfid_code
(optionally with event_id
). Tickets documentation
POST https://l.oveit.com/api/tickets/scan
Body (choose one):
{ "ticket_code": "fdc5e169" } (recommended after you navigated and extracted the relevant ticket code)
or { "rfid_code": "ABCD1234", "event_id": 1234 }
Response highlights
attendee.fields
: the form schema (label, type, mandatory).attendee.values
: the attendee’s submitted values in the same order.event
,order
,checkins
, andrfid_codes
are also included.
This is the documented way to fetch the guest form tied to a ticket. Tickets documentation
Example (curl)
curl -X POST https://l.oveit.com/api/tickets/scan \
-H "Authorization: Bearer $OVEIT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"ticket_code":"fdc5e169"}'
Mapping to an usable object (js):
const res2 = await fetch("https://l.oveit.com/api/tickets/scan", {
method: "POST",
headers: {
"Authorization": `Bearer ${OVEIT_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ ticket_code })
});
const payload = await res2.json();
const { attendee } = payload;
// Pair field labels to values:
const guest = Object.fromEntries(
attendee.fields.map((f, i) => [f.name, attendee.values[i]])
);
// e.g., guest["Name"], guest["Email"], etc.