API Service
Endpoints

Endpoints

Die External Scan API bietet Endpoints für zwei Integrationswege:

REST API (Eigene Software)

MethodeEndpointAuthBeschreibung
POST/scan/validatex-api-key HeaderTicket prüfen ohne zu entwerten
POST/scan/consumex-api-key HeaderTicket prüfen und entwerten

TikFlow Hardware

MethodeEndpointAuthBeschreibung
POST/scan/hw/consume?key= QueryTicket entwerten (Geräte-Format)
POST/scan/hw/validate?key= QueryTicket validieren (Geräte-Format)
POST/scan/hw/heartbeat?key= QueryHeartbeat / Verbindungstest

Base URL

https://scan.tikflow.de

REST API Endpoints

POST /scan/validate

Prüft ein Ticket auf Gültigkeit, ohne eine Nutzung zu registrieren. Ideal für Vorprüfungen oder Info-Terminals.

Request

curl -X POST https://scan.tikflow.de/scan/validate \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ticketCode": "TK1.tkt_abc123.xyz789"}'

Request Body

ParameterTypErforderlichBeschreibung
ticketCodestring✅ JaDer vollständige Ticket-Code (aus QR-Code)

Response – Ticket gültig

{
  "valid": true,
  "status": "validated",
  "message": "Ticket ist gültig",
  "ticketId": "tkt_abc123xyz",
  "ticketType": "multi",
  "usesAllowed": 10,
  "usesConsumed": 3,
  "usesRemaining": 7,
  "holder": {
    "firstName": "Max",
    "lastName": "Mustermann"
  },
  "validFrom": null,
  "validUntil": "2026-12-31T23:59:59.000Z"
}

Response – Ticket erschöpft

{
  "valid": false,
  "status": "exhausted",
  "message": "Ticket hat keine verbleibenden Nutzungen",
  "ticketId": "tkt_abc123xyz",
  "ticketType": "multi",
  "usesAllowed": 10,
  "usesConsumed": 10,
  "usesRemaining": 0
}

POST /scan/consume

Prüft ein Ticket und registriert gleichzeitig eine Nutzung (Entwertung). Verwenden Sie diesen Endpoint für den tatsächlichen Einlass.

Request

curl -X POST https://scan.tikflow.de/scan/consume \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ticketCode": "TK1.tkt_abc123.xyz789"}'

Request Body

ParameterTypErforderlichBeschreibung
ticketCodestring✅ JaDer vollständige Ticket-Code (aus QR-Code)

Response – Erfolgreich entwertet

{
  "valid": true,
  "status": "consumed",
  "message": "Ticket erfolgreich entwertet",
  "scannedAt": "2026-01-06T14:30:00.000Z",
  "ticketId": "tkt_abc123xyz",
  "ticketType": "multi",
  "usesAllowed": 10,
  "usesConsumed": 4,
  "usesRemaining": 6,
  "holder": {
    "firstName": "Max",
    "lastName": "Mustermann"
  },
  "validFrom": null,
  "validUntil": "2026-12-31T23:59:59.000Z"
}

💡 Hinweis: Das Feld scannedAt enthält den Zeitstempel der Entwertung und ist nur bei /scan/consume vorhanden.


Hardware Endpoints

Die Hardware-Endpoints sind für physische Zutrittskontrollgeräte konzipiert, die HTTP-Requests in einem eigenen Datenformat senden. TikFlow erkennt das Gerätemodell automatisch und verarbeitet die Anfrage entsprechend.

ℹ️ Die Konfiguration Ihres Geräts ist unter Hardware-Integration beschrieben.

POST /scan/hw/consume

Empfängt einen Scan-Request vom Hardware-Controller, extrahiert den Ticket-Code aus dem Geräte-Format, validiert und entwertet das Ticket. Die Antwort wird im Geräte-eigenen Format zurückgegeben.

Request (Beispiel: Cloud B4 Controller)

POST /scan/hw/consume?key=YOUR_API_KEY
Content-Type: application/json
{
  "Card": "VEsxLnRrdF9hYmMxMjMueHl6Nzg5",
  "Serial": "897132",
  "Reader": 0
}

Das Feld Card enthält den QR-Code-Inhalt Base64-kodiert. TikFlow dekodiert und verarbeitet ihn automatisch.

Response – Zutritt gewährt

{
  "ActIndex": "0",
  "AcsRes": "1",
  "Time": "1",
  "Name": "Max M.",
  "Note": "Ticket gültig (3/10)"
}

Response – Zutritt verweigert

{
  "ActIndex": "0",
  "AcsRes": "0",
  "Time": "0",
  "Note": "Ticket erschöpft"
}

Response-Felder (Cloud B4)

FeldBeschreibung
AcsRes"1" = Zutritt gewährt, "0" = verweigert
ActIndexRelais-Ausgang ("0" = IN, "1" = OUT)
TimeTüröffnungsdauer in Sekunden
NameAnzeige auf dem Gerätedisplay (max. 16 Bytes)
NoteStatusmeldung auf dem Display (max. 32 Bytes)

POST /scan/hw/validate

Identisch zu /scan/hw/consume, jedoch ohne Entwertung. Das Ticket wird nur geprüft, keine Nutzung wird registriert.


POST /scan/hw/heartbeat

Verbindungstest für Hardware-Geräte. Der Controller sendet regelmäßig Heartbeat-Requests, um die Verbindung zu prüfen.

Response

{
  "Key": "value_from_request"
}

Der Heartbeat bestätigt dem Gerät, dass der TikFlow-Server erreichbar ist.


Response-Felder (REST API)

Allgemeine Felder

FeldTypBeschreibung
validbooleantrue wenn Ticket gültig/entwertet, sonst false
statusstringStatus-Code (siehe unten)
messagestringLesbare Statusmeldung
ticketIdstringEindeutige Ticket-ID
ticketTypestring"single" oder "multi"

Nutzungs-Felder

FeldTypBeschreibung
usesAllowednumberMaximale Anzahl Nutzungen
usesConsumednumberBereits verbrauchte Nutzungen
usesRemainingnumberVerbleibende Nutzungen

Optionale Felder

FeldTypBeschreibung
holderobjectInhaberdaten (falls personalisiert)
holder.firstNamestringVorname des Inhabers
holder.lastNamestringNachname des Inhabers
validFromstring | nullGültig ab (ISO 8601)
validUntilstring | nullGültig bis (ISO 8601)
scannedAtstringZeitstempel der Entwertung (nur bei /consume)
reasonstringAblehnungsgrund bei status: "rejected"

Status-Werte

StatusvalidBeschreibung
validatedtrueTicket ist gültig (nur bei /validate)
consumedtrueTicket wurde erfolgreich entwertet
exhaustedfalseAlle Nutzungen aufgebraucht
rejectedfalseTicket ungültig (siehe reason)
not_foundfalseTicket existiert nicht

Rejection Reasons

Bei status: "rejected" enthält das Feld reason den Ablehnungsgrund:

ReasonBeschreibung
invalid_macUngültige Ticket-Signatur (manipuliert oder fehlerhaft)
event_not_allowedAPI-Key hat keinen Zugriff auf dieses Event
ticket_cancelledTicket wurde storniert
not_yet_validTicket ist noch nicht gültig (validFrom in der Zukunft)
expiredTicket ist abgelaufen (validUntil überschritten)

Beispiel: Ungültige Signatur

{
  "valid": false,
  "status": "rejected",
  "reason": "invalid_mac",
  "message": "Ungültige Ticket-Signatur"
}

Ticket-Typen

TypticketTypeusesAllowedBeschreibung
Einzelticketsingle1Einmaliger Einlass
Mehrfachkartemulti2-100z.B. 10er-Karte Schwimmbad
Dauerkartemulti9999Unbegrenzte Nutzungen im Gültigkeitszeitraum

Typische Workflows

REST API: Einlass am Drehkreuz

1. Besucher scannt QR-Code
2. Ihre Software sendet POST /scan/consume mit x-api-key Header
3. Bei valid=true → Drehkreuz freigeben
4. Bei valid=false → Zugang verweigern, message anzeigen

REST API: Vorprüfung am Info-Terminal

1. Besucher scannt QR-Code zur Kontrolle
2. System sendet POST /scan/validate
3. Anzeige: Ticket-Status, verbleibende Nutzungen
4. Keine Entwertung → Besucher kann später am Einlass scannen

TikFlow Hardware: Automatischer Einlass

1. Besucher hält QR-Code vor den Scanner des Geräts
2. Controller sendet Scan-Daten automatisch an /scan/hw/consume
3. TikFlow validiert und entwertet das Ticket
4. Bei Erfolg: Gerät öffnet Drehkreuz/Tür automatisch
5. Bei Ablehnung: Gerät zeigt Fehlermeldung auf dem Display