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.
Hinweis: Es werden maximal nur 500 Einträge mit einer Abfrage zurückgegeben (weitere Infos siehe Parameter „offset“)
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
- title:string
(Hiermit kann nach Projekten gesucht werden, die den angegebenen string im Titel enthalten) - titles:string (Kommaseparierte strings)
(Hiermit kann nach Projekten gesucht werden, die einen der angegebenen strings (durch Komma getrennt) im Titel enthalten) - offset:int
(Bei einer Abfrage der Projekte werden maximal 500 Einträge zurückgegeben, sollten exakt 500 Einträge zurückgegeben werden, kann man mithilfe dieses Parameters das nächste Set an Projekten holen, also z.B. offset=500)
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
}
}, ...
]