API-Schnittstelle
Das Plugin stellt eine Admin-REST-API für externe Systeme (z.B. Ticketscanner, Einlasskontrolle) bereit.
Vollständige API-Referenz: shopware.stoplight.io – Authentication
Authentifizierung
Client Credentials
POST /api/oauth/token{
"grant_type": "client_credentials",
"client_id": "<client_id>",
"client_secret": "<client_secret>"
}Password Grant
POST /api/oauth/token{
"client_id": "administration",
"grant_type": "password",
"scopes": "write",
"username": "<username>",
"password": "<password>"
}Response:
{
"token_type": "Bearer",
"expires_in": 600,
"access_token": "...",
"refresh_token": "..."
}Routen
App-API aktivieren
GET /api/fgits/tickets/api/activate
Authorization: Bearer <access_token>Sendet eine Aktivierungs-E-Mail mit QR-Code an die E-Mail-Adresse des authentifizierten Benutzers.
Response:
{ "status": "OK" }Events abrufen
GET /api/fgits/tickets/api/events
Authorization: Bearer <access_token>Parameter:
Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
`timezone` | int (0/1) | nein | `1` = Zeitzone aus Plugin-Konfiguration für `datetime` verwenden (ab v3.4.7) |
Gibt Informationen über Ticket-Events (Produkte mit Ticket-Markierung) aus.
Response:
{
"data": [
{
"id": "abc123...",
"name": "Konzert 2026",
"datetime": "2026-06-01T18:00:00+02:00",
"createdAt": "2025-01-15T10:00:00+00:00"
}
],
"success": true
}Tickets abrufen
GET /api/fgits/tickets/api/tickets
Authorization: Bearer <access_token>Parameter:
Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
`event_ids` | array | nein | Filtert Tickets auf bestimmte Event-IDs |
`extended` | int (0/1) | nein | `1` = Gibt zusätzlich `event_name` und `event_datetime` aus (ab v3.4.6) |
`timezone` | int (0/1) | nein | `1` = Zeitzone aus Plugin-Konfiguration verwenden (ab v3.4.7) |
Response (extended: 0):
{
"data": [
{
"id": "uuid...",
"ticketId": "100001000001123454",
"createdAt": "2026-03-01T10:00:00+00:00",
"personalizedFullname": "Max Mustermann",
"personalizedEmail": "max@example.com",
"personalizedCustomFields": [],
"customerFullname": "Max Mustermann",
"checkInDatetime": null,
"active": true,
"event_id": "product-uuid..."
}
],
"success": true
}Response (extended: 1): Zusätzlich:
{
"event_name": "Konzert 2026",
"event_datetime": "2026-06-01T18:00:00+02:00"
}Ticket scannen
POST /api/fgits/tickets/api/tickets
Authorization: Bearer <access_token>
Content-Type: application/jsonBody:
Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
`ticket_id` | string | ja | Die Ticketnummer (z.B. SSCC-18-Code oder UUID-basierter Hash) |
`event_ids` | array | nein | Filtert auf bestimmte Events |
`check_in` | int (0/1) | nein | `0` = Ticket nicht als gescannt markieren (Standard: 1) (ab v3.4.6) |
`extended` | int (0/1) | nein | `1` = Gibt zusätzlich Event-Infos zurück (ab v3.4.6) |
`timezone` | int (0/1) | nein | `1` = Zeitzone aus Plugin-Konfiguration verwenden (ab v3.4.7) |
Gibt Informationen über das Ticket aus und markiert es standardmäßig als gescannt (Check-in).
Wenn das Ticket bereits gescannt oder deaktiviert wurde, wird "success": false zurückgegeben.
Response (extended: 0):
{
"data": {
"id": "uuid...",
"ticketId": "100001000001123454",
"createdAt": "2026-03-01T10:00:00+00:00",
"personalizedFullname": "Max Mustermann",
"personalizedEmail": "max@example.com",
"personalizedCustomFields": [],
"customerFullname": "Max Mustermann",
"checkInDatetime": "2026-06-01T18:05:00+02:00",
"active": true,
"event_id": "product-uuid..."
},
"success": true
}`success: false` wenn:
Ticket bereits gescannt (`checkInDatetime` ist gesetzt)
Ticket deaktiviert (`active: false`)
Ticket nicht gefunden
Hinweis zu Ticketnummern (SSCC-18, ab v3.9.0)
Wenn das SSCC-18-Format aktiviert ist, besteht die `ticketId` aus 18 Stellen:
[Event-ID 6-stellig][Sequenz 6-stellig][Zufall 5-stellig][GS1-Prüfziffer 1-stellig]Beispiel: 100001000001123454
`100001` — Event-ID
`000001` — Sequenznummer (atomar, eindeutig pro Event)
`12345` — Zufallskomponente
`4` — GS1 Modulo-10 Prüfziffer
Die Sequenzvergabe ist transaktionssicher und parallelitätssicher (validiert mit 50 gleichzeitigen Prozessen ohne Duplikate).