Skip to content

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, all
  • assigned_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, all
  • type: 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

StatusBedeutung
401Nicht authentifiziert – Token fehlt oder abgelaufen
403Keine Berechtigung für diese Aktion
404Ressource nicht gefunden
422Validierungsfehler – Details im errors-Feld
500Serverfehler

Beispiel Validierungsfehler:

json
{
  "message": "The given data was invalid.",
  "errors": {
    "email": ["The email field is required."]
  }
}

Bredow Systems – Softwarelösungen aus Deutschland