Emirates ID Integration · UAE

Read Emirates ID cards straight into your web, mobile and kiosk apps.

A customer taps their card and your form fills in under a second, in English and Arabic, with photo. No re-typing, no browser plugins, no per-PC installer pain.

Emirates ID readerAny PC/SC smart-card or NFC reader
EID Connect serviceRuns on the counter PC as a Windows service. Reads the chip.
Your appWeb, mobile or kiosk. Gets a JSON event over local HTTP.

Built for UAE counters and kiosks

Anywhere staff re-type Emirates ID details today.

Typing centres

Fill visa, residency and government forms from the card in one tap.

Clinics & hospitals

Register patients at reception using the Emirates ID as the patient key.

Hotels & holiday homes

Capture resident guests at check-in, ready for tourism and police reporting.

Real estate & car rental

Auto-fill tenancy and rental contracts with the correct legal name.

Visitor management

Self check-in kiosks, badges, and access logs with masked IDs.

Age-restricted retail

An allowed / not-allowed answer that stores nothing.

Quickstart

Start building in two minutes. You don't need a reader: the mock bridge speaks the exact same protocol.

1. Start a reader (or the mock)

npx @elephantclock/eid-connect-mock
# press c to send a synthetic Emirates ID card

2. Install the client

npm install @elephantclock/eid-connect

3. Fill your form

import { connect } from '@elephantclock/eid-connect';

connect({
  onCard: (card) => {
    form.name.value       = card.nameEnglish;
    form.nameArabic.value = card.nameArabic;
    form.emiratesId.value = card.idNumber;
    form.dob.value        = card.dateOfBirth;   // ISO yyyy-MM-dd
    photo.src             = card.photoDataUrl;
  },
});

React: import { useEidReader } from '@elephantclock/eid-connect/react'. More in the client library and the examples.

Protocol reference

The service is a small local HTTP server. Any language that can read Server-Sent Events can integrate: JavaScript, C#, Python, Flutter, Java.

EndpointDescription
GET /eventsSSE stream. Each message is data: {json} with a type field. A : heartbeat comment every 30 s keeps proxies open.
GET /status{"status":"running","clients":1,"timestamp":"…"}, for health checks.

Default address http://localhost:8080.

Event: connection

{ "type": "connection", "status": "connected", "timestamp": "2026-10-26T10:15:02.114", "clientId": "1077432858" }

Event: card_read

{
  "type": "card_read",
  "timestamp": "2026-10-26T10:15:09.552",
  "id": "784-0000-0000001-0",
  "cardNumber": "000000001",
  "cardSerialNumber": "0000000000000001",
  "nfcUid": "0000000000000001",
  "status": "SUCCESS",
  "fullNameEnglish": "SAMPLE CARDHOLDER ONE",
  "fullNameArabic": "حامل بطاقة تجريبي واحد",
  "nationality": "United Arab Emirates",
  "nationalityArabic": "الإمارات العربية المتحدة",
  "gender": "M",
  "dateOfBirth": "01/01/1990",
  "issueDate": "01/01/2024",
  "expiryDate": "01/01/2029",
  "photo": "<base64 image>",
  "photoSize": 18432,
  "cardCount": 1,
  "readerState": "CONNECTED"
}

Dates are typically dd/MM/yyyy. The client library converts them to ISO yyyy-MM-dd.

Event: nfc_card_read

A non-Emirates-ID NFC tag (staff badge, membership card), or UID-only mode when a full read isn't available.

{ "type": "nfc_card_read", "timestamp": "…", "uid": "04A1B2C3", "cardType": "MIFARE_CLASSIC_1K", "sak": "0x08",
  "readerType": "NFC", "readerState": "CONNECTED", "cardCount": 2 }

UID-only reads also carry "fallback": true, nfcUid, cardSerialNumber and readerName.

Event: error

{ "type": "error", "message": "Card data conversion failed", "timestamp": "…" }

Security & privacy

Emirates ID data is personal data under UAE PDPL. EID Connect listens on the local PC only, and you choose which apps may receive card data.

SettingDefaultPurpose
EID_BIND_ADDRESS127.0.0.1Listens on this PC only. Set 0.0.0.0 only when tablets or kiosks on the LAN must connect, and firewall the port.
EID_ALLOWED_ORIGINSunset = any origin, with a warning loggedComma-separated list of the web app origins allowed to receive card data, e.g. https://app.example.ae. Every other website is refused. Always set this in production.
Offline read vs. online validation. EID Connect reads the card chip, for capture, auto-fill and onboarding. It doesn't check the card against government records. Online validation for regulated eKYC is a separate service. Ask us about it.

Licensing

Free to learn with. Licensed for business.

Personal & education

Free
  • Client library, mock bridge and examples
  • Students, teachers, researchers, hobby projects
  • Charities, schools, public research and government bodies
  • PolyForm Noncommercial 1.0.0
Start on GitHub

See it working with a real Emirates ID

A 20-minute live demo in Abu Dhabi, Dubai or online.