Design
API Reference
Die RoomZ API ermöglicht den Zugriff auf alle Kernfunktionen und kann für Integrationen mit Drittsystemen genutzt werden.
Basis-URL: /api/mobile/
Authentifizierung
Login
http
POST /api/mobile/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "secret"
}Response:
json
{
"token": "abc123...",
"user": {
"id": 1,
"name": "Max Mustermann",
"email": "user@example.com",
"role": {
"id": 2,
"name": "Geschäftsführer"
}
}
}Authentifizierte Requests
Alle weiteren Requests erfordern den Token im Header:
http
Authorization: Bearer {token}Logout
http
POST /api/mobile/logout
Authorization: Bearer {token}Push Notifications
Token registrieren
http
POST /api/mobile/push/register-token
Authorization: Bearer {token}
Content-Type: application/json
{
"token": "ExponentPushToken[...]"
}Dashboard
KPIs abrufen
http
GET /api/mobile/dashboard
Authorization: Bearer {token}Response:
json
{
"open_tickets": 5,
"active_tenants": 42,
"overdue_payments": 1250.00,
"monthly_income": 15000.00
}Tickets
Liste abrufen
http
GET /api/mobile/tickets?status=open
Authorization: Bearer {token}Query-Parameter:
status:open,in_progress,closed,allassigned_to_me:1(nur eigene)
Response:
json
{
"data": [
{
"id": 1,
"title": "Heizung defekt",
"description": "...",
"priority": "high",
"status": "open",
"category": { "id": 1, "name": "Reparatur" },
"location": { "id": 1, "name": "Haupthaus" },
"room": { "id": 5, "name": "Zimmer 105" },
"assigned_to": null,
"created_at": "2026-02-04T10:00:00Z"
}
],
"meta": {
"current_page": 1,
"total": 15
}
}Ticket erstellen
http
POST /api/mobile/tickets
Authorization: Bearer {token}
Content-Type: application/json
{
"title": "Neues Ticket",
"description": "Beschreibung...",
"priority": "medium",
"category_id": 1,
"location_id": 1,
"room_id": 5
}Ticket-Details
http
GET /api/mobile/tickets/{id}
Authorization: Bearer {token}Ticket aktualisieren
http
PUT /api/mobile/tickets/{id}
Authorization: Bearer {token}
Content-Type: application/json
{
"status": "in_progress"
}Ticket übernehmen
http
POST /api/mobile/tickets/{id}/claim
Authorization: Bearer {token}Als gelesen markieren
http
POST /api/mobile/tickets/{id}/mark-read
Authorization: Bearer {token}Kommentar hinzufügen
http
POST /api/mobile/tickets/{id}/comments
Authorization: Bearer {token}
Content-Type: multipart/form-data
comment: "Mein Kommentar"
image: [file]Zeiterfassung
Laufende Zeit abrufen
http
GET /api/mobile/time-entries/running
Authorization: Bearer {token}Response:
json
{
"id": 123,
"activity": { "id": 1, "name": "Reinigung" },
"started_at": "2026-02-04T08:00:00Z",
"running_time_seconds": 3600
}Zeit starten
http
POST /api/mobile/time-entries/start
Authorization: Bearer {token}
Content-Type: application/json
{
"activity_id": 1
}Zeit stoppen
http
POST /api/mobile/time-entries/stop
Authorization: Bearer {token}
Content-Type: application/json
{
"break_minutes": 30,
"notes": "Zimmer 101-105"
}Monatsliste
http
GET /api/mobile/time-entries?month=2026-02
Authorization: Bearer {token}Freigeben
http
POST /api/mobile/time-entries/{id}/approve
Authorization: Bearer {token}Ablehnen
http
POST /api/mobile/time-entries/{id}/reject
Authorization: Bearer {token}
Content-Type: application/json
{
"reason": "Pausenzeit fehlt"
}Aktivitäten
Liste abrufen
http
GET /api/mobile/activities
Authorization: Bearer {token}Response:
json
[
{ "id": 1, "name": "Reinigung" },
{ "id": 2, "name": "Reparatur" },
{ "id": 3, "name": "Wartung" }
]Standorte
Liste abrufen
http
GET /api/mobile/locations
Authorization: Bearer {token}Zahlungen
Liste abrufen
http
GET /api/mobile/payments?status=overdue
Authorization: Bearer {token}Query-Parameter:
status:pending,paid,overdue,alltype:rent,parking
Als bezahlt markieren
http
POST /api/mobile/payments/{id}/mark-paid
Authorization: Bearer {token}
Content-Type: application/json
{
"payment_method": "bank_transfer"
}Als unbezahlt markieren
http
POST /api/mobile/payments/{id}/mark-unpaid
Authorization: Bearer {token}Mieter
Liste abrufen
http
GET /api/mobile/tenants?status=active
Authorization: Bearer {token}Details abrufen
http
GET /api/mobile/tenants/{id}
Authorization: Bearer {token}Response:
json
{
"id": 1,
"first_name": "Max",
"last_name": "Mustermann",
"email": "max@example.com",
"phone": "+49...",
"room": {
"id": 5,
"name": "Zimmer 105",
"floor": { "name": "1. OG" },
"location": { "name": "Haupthaus" }
},
"monthly_rent": 500.00,
"move_in_date": "2026-01-01",
"parking_spot": { "id": 1, "name": "P001" },
"payments": [...]
}Benachrichtigungen
Liste abrufen
http
GET /api/mobile/notifications
Authorization: Bearer {token}Als gelesen markieren
http
POST /api/mobile/notifications/{id}/read
Authorization: Bearer {token}Alle als gelesen markieren
http
POST /api/mobile/notifications/mark-all-read
Authorization: Bearer {token}Fehler-Responses
| Status | Bedeutung |
|---|---|
401 | Nicht authentifiziert – Token fehlt oder abgelaufen |
403 | Keine Berechtigung für diese Aktion |
404 | Ressource nicht gefunden |
422 | Validierungsfehler – Details im errors-Feld |
500 | Serverfehler |
Beispiel Validierungsfehler:
json
{
"message": "The given data was invalid.",
"errors": {
"email": ["The email field is required."]
}
}