API
Authentifizierung
Um die Api nutzen zu können ist eine Authentifizierung erforderlich. Dafür werden die normalen Account (Benutzer) Login-Daten verwendet. Wenn die Authentifizierung erfolgreich war, wird ein Auth-Token
als string zurückgegeben (JSON Web Token).
Dieser Auth-Token
muss dann bei allen weiteren API-Anfragen im HTTP-Header (im Authorization-Feld) als Bearer-Token mit übergeben werden:
Header-Key: Authorization
Header-Value: Bearer <Auth-Token>
POST https://api.lupax.org/api/v1/auth/login
Data (Body, raw)
{
"email": "Account-Email-Adresse",
"password": "Account-Passwort"
}
Response Auth-Token
(string – JWT)
Organisationen
Mit dieser Anfrage werden alle Organisationen ausgegeben, mit der der aktuelle Account verknüpft ist.
GET https://api.lupax.org/api/v1/organizations
Response (json)
[
{
"id": int,
"slug": string,
"branch": string,
"title": string,
"url": string,
"vacation_request_active": bool
}, ...
]
Projekte
Mit dieser Anfrage werden alle Projekte als Array anhand bestimmter Parameter ausgegeben.
GET https://api.lupax.org/api/v1/organizations/[Organisations-Id]/projects
Verfügbare GET Parameter
- date_from:string
- Format: yyyy-mm-dd hh:ii:ss
- Standard: Heute – 00:00 Uhr
- date_to:string
- Format: yyyy-mm-dd hh:ii:ss
- Standard: Heute + 3 Wochen – 23:59 Uhr
- responsible:int (Verantwortlicher für das Projekt – User Id)
- Standard: null
- status:int (Status vom Projekt – Status Id)
- Standard: null
- crew_booking_status:bool
(Soll der Buchungsstatus von jedem Mitarbeiter in der Crew mit ausgegeben werden? Mitarbeiter die sich im Ausschreibungsstatus „Angebot“ befinden werden bei „true“ auch mit ausgegeben)- Standard: false
Response (json)
[
{
"id": int,
"title": string,
"date_start": datetime, // YYYY-MM-DDThh:mm:ssTZD
"date_end": datetime, // YYYY-MM-DDThh:mm:ssTZD
"description": string (html),
"client": {
"salutation": string,
"name": string,
"first_name": string,
"last_name": string,
"type": string, // 'company'|'person'
"customer": tinyint,
"partner": tinyint,
"deleted": tinyint,
"organization": int,
"phone_numbers": [
string, ...
]
},
"sales": float, // Umsatz
"responsible": {
"id": int,
"first_name": string,
"last_name": string,
"firm_tel": string,
"firm_mobile": string,
"staff": int
},
"status": {
"id": int,
"title": string,
"color": string,
"deleted": tinyint
},
"company": { // Daten der eigenen Organisation/Firma
"id": int,
"title": string,
"logo": string,
"company_name": string
},
"mission": int, // ID der Ausschreibung
"organization": int,
"extra_input": [ // Extra Felder
{
"title": string,
"value": string
}, ...
],
"responsible_extra": [], // Zusätzliche Verantwortliche
"files": [ // Dateien
{}, ...
],
"jobs": [ // Auflistung aller Dienstleistungen im Projekt
{
"id": int,
"type": { // Angaben zur Dienstleistungsart
"title": string,
"icon": string,
"deleted": tinyint
},
"title": string,
"description": string,
"date_start": datetime, // Zeitraum-Beginn
"date_end": datetime, // Zeitraum-Ende
"duration": float, // Anzahl der Stunden
"client": int,
"address": {
"lat": float,
"lng": float,
"street": string,
"street_number": int,
"postal_code": int,
"city": string,
"text": string, // Komplette Adresse in einer Zeile
"additional": string // Bemerkungen
},
"address_note": string,
"address_contact_person": string,
"address_contact_phone": string,
"dispo_start": datetime, // Realer-Beginn
"dispo_end": datetime, // Reales-Ende
"tour": int, // ID der Tour
"tour_duration_cache": int, // Puffer-Zeit (Min.)
"tour_drive": int, // Fahrzeit zum nächsten Ziel (Min.)
"tour_drive_cache": int, // Puffer für Fahrzeit (Min.)
"tour_order": int, // Reihenfolge in der Tour
"tour_ignore": tinyint, // Keine Tour benötigt
"tour_completed": tinyint, // Job in Tour abgeschlossen
"project": int, // Projekt ID
"responsible": int,
"linked": int, // Verknüpfung mit anderem Job
"deleted": tinyint,
"organization": int,
"crew": [
{
"qualification": {
"title": string,
"shortcut": string
},
"staffs": [
{
"id": int,
"first_name": string,
"last_name": string,
"department": int, // Abteilungs-ID
"mobile": string,
"booking_status": string // manual|offer|confirmation
// wird nur ausgegeben wenn bei der Anfrage "crew_booking_status" auf true gesetzt ist (siehe oben)
}, ...
],
"required": int
}, ...
]
}, ...
]
}, ...
]
Touren
Mit dieser Anfrage werden alle Touren als Array anhand bestimmter Parameter ausgegeben.
GET https://api.lupax.org/api/v1/organizations/[Organisations-Id]/tours
Verfügbare GET Parameter
- date_from:string
- Format: yyyy-mm-dd hh:ii:ss oder parsebare Zeichenkette (strtotime())
- Standard: Heute – 00:00 Uhr
- date_to:string
- Format: yyyy-mm-dd hh:ii:ss oder parsebare Zeichenkette (strtotime())
- Standard: Heute + 3 Wochen – 23:59 Uhr
- vehicle:int (Fahrzeug der Tour – Fahrzeug Id)
- Standard: null
- completed:tinyint (Ob Tour als erledigt markiert ist: 0 = nicht erledigt oder 1 = erledigt)
- Standard: null (egal ob erledigt oder nicht)
- minimal:tinyint
(Sollen nur minimale Daten angezeigt werden? Wenn minimal auf 1 gesetzt ist, werden z.B. erweiterte Informationen zu den Dienstleistungen und den Adressen nicht mit ausgegeben, aber die Ladezeit ist kürzer.)- Standard: 1
- job_options: array
- minimal:tinyint (Sollen nur minimale Daten angezeigt werden?)
- Standard: 1
- project:tinyint (Sollen minimale Daten vom Projekt angezeigt werden, statt nur einer ID wenn „minimal“ = 1 ist?)
- Standard: 0
- address:tinyint
(Sollen die genauen Adressdaten mit ausgegeben werden? Wenn minimal=0 ist, werden die Adressdaten sowieso ausgegeben.)- Standard: 0
- completed_date:tinyint
(Soll das Datum mit ausgegeben werden, wann die Dienstleistung zuletzt als „erledigt“ markiert wurde? Dies kann die Ladezeit erhöhen.)- Standard: 0
- minimal:tinyint (Sollen nur minimale Daten angezeigt werden?)
Response (json)
[
{ // TOUR
"id": int,
"title": string,
"vehicle": {
"id": int,
"title": string,
"code": string, // Kennzeichen
"size": int, // Größe des Fahrzeugs (0 = PKW, 1= LKW 3,5t, ...)
"driver_license": int, // 0 = Keinen, 1 = PKW - B, ...
"seats": int, // Anzahl der Sitzplätze
"petrol_consumption": int, // Durchschnittlicher Verbrauch
"deleted": tinyint
},
"date_start": datetime, // YYYY-MM-DDThh:mm:ssTZD
"date_end": datetime, // YYYY-MM-DDThh:mm:ssTZD
"drive_start": int, // Fahrzeit zum nächsten Ziel (Min.)
"drive_start_cache": int, // Puffer für Fahrzeit (Min.)
"address_start": {
"lat": float,
"lng": float,
"street": string,
"street_number": int,
"postal_code": int,
"city": string,
"text": string, // Komplette Adresse in einer Zeile
"additional": string // Bemerkungen
},
"address_end": {
"lat": float,
"lng": float,
"street": string,
"street_number": int,
"postal_code": int,
"city": string,
"text": string, // Komplette Adresse in einer Zeile
"additional": string // Bemerkungen
},
"distance": int, // Strecke (Meter), die bei der Tour zurückgelegt wird
"description": string,
"completed": tinyint,
"deleted": tinyint,
"organization": int,
"jobs": [
{
"id": int,
"type": { // Angaben zur Dienstleistungsart
"title": string,
"icon": string,
"deleted": tinyint
},
"title": string,
"description": string,
"date_start": datetime, // Zeitraum-Beginn
"date_end": datetime, // Zeitraum-Ende
"duration": float, // Anzahl der Stunden
"client": int || { // ID bei "minimal"=1, sonst Objekt
"salutation": string,
"name": string,
"first_name": string,
"last_name": string,
"type": string, // 'company'|'person'
"customer": tinyint,
"partner": tinyint,
"deleted": tinyint
},
"address": {
"lat": float,
"lng": float,
"street": string,
"street_number": int,
"postal_code": int,
"city": string,
"text": string, // Komplette Adresse in einer Zeile
"additional": string // Bemerkungen
},
"address_note": string,
"address_contact_person": string,
"address_contact_phone": string,
"dispo_start": datetime, // Realer-Beginn
"dispo_end": datetime, // Reales-Ende
"tour": int, // ID der Tour
"tour_duration_cache": int, // Puffer-Zeit (Min.)
"tour_drive": int, // Fahrzeit zum nächsten Ziel (Min.)
"tour_drive_cache": int,// Puffer für Fahrzeit (Min.)
"tour_order": int, // Reihenfolge in der Tour
"tour_ignore": tinyint, // Keine Tour benötigt
"tour_completed": tinyint, // Job in Tour abgeschlossen
"tour_completed_date": datetime, // Wird nur ausgegeben wenn im GET Parameter "completed_date" auf 1 gesetzt wurde
"project": int || { // ID bei "minimal"=1, sonst Objekt
"id": int,
"title": string,
"date_start": datetime, // YYYY-MM-DDThh:mm:ssTZD
"date_end": datetime, // YYYY-MM-DDThh:mm:ssTZD
"description": string,
"client": int,
"sales": float, // Umsatz
"responsible": {
"id": int,
"first_name": string,
"last_name": string,
"firm_tel": string,
"firm_mobile": string,
"staff": int
},
"status": {
"id": int,
"title": string,
"color": string,
"deleted": tinyint
},
"company": int,
"mission": int, // ID der Ausschreibung
"organization": int,
"extra_input": [ // Extra Felder
{
"title": string,
"value": string
}, ...
],
"responsible_extra": [], // Zusätzliche Verantwortliche
"files": [ // Dateien
{}, ...
]
},
"responsible": {
"id": int,
"first_name": string,
"last_name": string,
"firm_tel": string,
"firm_mobile": string,
"staff": int
},
"linked": int, // Verknüpfung mit anderem Job
"deleted": tinyint,
"organization": int,
"files": [],
"extra_input": [ // Extra Felder
{
"title": string,
"value": string
}, ...
],
"responsible_extra": [], // Zusätzliche Verantwortliche
"company": {
"id": int,
"title": string,
"logo": string,
"company_name": string
}
}, ...
],
"files": [{}, ...], // Dateien
"drivers": {
"driver": [ // Array von Fahrern
{
"id": int,
"first_name": string,
"last_name": string,
"department": int, // Abteilung
"organization": int
}, ...
],
"co-driver": [] // Array von Beifahrern
},
"company": {
"id": int,
"title": string,
"logo": string,
"company_name": string
}
}, ...
]
Dienstplaneinträge
Mit dieser Anfrage werden alle Dienstplaneinträge von allen Mitarbeitern als Array anhand bestimmter Parameter ausgegeben.
GET https://api.lupax.org/api/v1/organizations/[Organisations-Id]/rosters
Verfügbare GET Parameter
- date_from:string
- Format: yyyy-mm-dd hh:ii:ss
- Standard: Heute – 00:00 Uhr
- date_to:string
- Format: yyyy-mm-dd hh:ii:ss
- Standard: Heute + 1 Monat – 23:59 Uhr
Response (json)
[
{
"id": int,
"shift": int, // ID der Arbeitsschicht
"start": datetime,
"end": datetime,
"duration": time, // Dauer als Zeitangabe
"days": float, // Anzahl der Tage
"type": string, // Art des Eintrags (work, vacation, vacation_special, sick, available, not_available, free, overtime_adjust)
"title": string,
"organization": int,
"staff": {
"id": int,
"first_name": string,
"last_name": string,
"department": int // Abteilungs-ID
}
}, ...
]