---
title: Building an NFC Wristband Scanning System with Oveit’s Tickets API
description: 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…
url: "https://oveit.com/knowledge-base/building-an-nfc-wristband-scanning-system-with-oveits-tickets-api/"
updated: "2025-08-26"
category: 3. Developer Docs
tags:
  - API tickets
  - tickets
---

# Building an NFC Wristband Scanning System with Oveit’s Tickets API

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](https://l.oveit.com/api-documentation/tickets/)
- Ensure the wristband’s RFID has been **paired** with a ticket in Oveit (Scanning & Pairing app or API). [RFID documentation](https://l.oveit.com/api-documentation/rfid/)

# 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](https://l.oveit.com/api-documentation/tickets/)

```
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`, and `rfid_codes` are also included.
  This is the documented way to fetch the **guest form tied to a ticket**. [Tickets documentation](https://l.oveit.com/api-documentation/tickets/)

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.
```
