Erweitert osTickets REST API mit leistungsstarken Endpunkten für fortgeschrittenes Ticket-Management. Ermöglicht Ticket-Erstellung mit Markdown-Formatierung, Department-Routing, Subticket-Unterstützung und umfassende Ticket-Verwaltung (Update, Abrufen, Suchen, Löschen, Statistiken).
Perfekt für Integrationen, die granulare Kontrolle über die Standard-API-Fähigkeiten von osTicket hinaus benötigen - ideal für Support-Portale, Bug-Tracker, Automatisierungsplattformen (Zapier/Make.com) und benutzerdefinierte Workflows.
| Anforderung | Version | Hinweise |
|---|---|---|
| osTicket | 1.18.x | Plugin erweitert API via Signal-System |
| PHP | 8.1+ | Verwendet moderne PHP-Features: Enums, Union Types, Named Arguments |
| Webserver | Apache 2.4+ oder NGINX 1.18+ | Apache: .htaccess-Support erforderlich |
| Parsedown | Automatisch | Im Composer-Lock enthalten |
Optionale Abhängigkeiten:
| Plugin | Zweck | Link |
|---|---|---|
| Markdown Support | Markdown-Rendering in Tickets | GitHub |
| Subticket Manager | UI für Subticket-Management | GitHub |
| API Key Wildcard | Wildcard-IP-Validierung für API-Keys | GitHub |
api-endpoints-Ordner nach /include/plugins/ auf deinem osTicket-Server hochFinaler Pfad: /pfad/zu/osticket/include/plugins/api-endpoints/
cd /pfad/zu/osticket/include/plugins
git clone https://github.com/markus-michalski/osticket-api-endpoints.git
Das Plugin konfiguriert automatisch:
Beim Aktivieren deployed das Plugin automatisch /api/.htaccess:
# osTicket API Endpoints Plugin - Apache Configuration
<IfModule mod_rewrite.c>
RewriteEngine On
# Enable PATH_INFO for all API endpoints
AcceptPathInfo On
# Rewrite rules for endpoints with path info
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(tickets-update|tickets-get|tickets-delete)\.php/(.+)$ $1.php [L,QSA]
</IfModule>
# Erlauben von PATH_INFO für Endpunkte
<Files "tickets-update.php">
AcceptPathInfo On
</Files>
<Files "tickets-get.php">
AcceptPathInfo On
</Files>
<Files "tickets-delete.php">
AcceptPathInfo On
</Files>
Prüfe, ob .htaccess funktioniert:
curl -I "https://deine-domain.com/api/tickets-get.php/123456.json" \
-H "X-API-Key: DEIN_API_KEY"
# Sollte 200 OK zurückgeben (nicht 404)
Füge folgende Konfiguration zu deinem NGINX-Server-Block hinzu:
# osTicket API Endpoints Plugin - NGINX Configuration
# Endpunkte mit PATH_INFO (z.B. /api/tickets-update.php/123456.json)
location ~ ^/api/tickets-(update|get|delete)\.php/ {
fastcgi_split_path_info ^(/api/tickets-(update|get|delete)\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php-fpm.sock; # Oder 127.0.0.1:9000
}
# Endpunkte ohne PATH_INFO (z.B. /api/tickets-search.php?query=test)
location ~ ^/api/tickets-(search|stats|statuses)\.php$ {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
# Subticket-Endpunkte mit PATH_INFO
location ~ ^/api/tickets-subtickets-(parent|list)\.php/ {
fastcgi_split_path_info ^(/api/tickets-subtickets-(parent|list)\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
# Subticket-Endpunkte ohne PATH_INFO
location ~ ^/api/tickets-subtickets-(create|unlink)\.php$ {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
Nach dem Hinzufügen:
# Konfiguration testen
sudo nginx -t
# NGINX neu laden
sudo systemctl reload nginx
# Endpunkt testen
curl "https://deine-domain.com/api/tickets-stats.php" \
-H "X-API-Key: DEIN_API_KEY"
Nach der Plugin-Installation erscheint eine neue Konfigurations-Seite unter Admin Panel → Plugins → API Endpoints → Konfigurieren, die alle verfügbaren Endpunkte mit ihren zugehörigen Berechtigungen anzeigt:
Verfügbare API-Endpunkte:
can_create_tickets Permissioncan_update_tickets Permissioncan_read_tickets Permissioncan_search_tickets Permissioncan_delete_tickets Permissioncan_read_stats Permissioncan_manage_subtickets Permission (benötigt Subticket Manager Plugin)⚠️ Wichtig: Zugriff auf diese Endpunkte wird individuell pro API-Key über die Berechtigungen unten gesteuert.
API-Key-Berechtigungen konfigurieren:
POST /tickets)PATCH /tickets/:id)GET /tickets/:number)GET /tickets/search)DELETE /tickets/:number) - ⚠️ Aus Sicherheitsgründen mit Vorsicht nutzen!GET /tickets-stats)Das Plugin erweitert osTickets API-Key-Berechtigungssystem mit granularen Permissions.
| Berechtigung | Datenbank-Feld | Gewährt Zugriff auf |
|---|---|---|
| Tickets erstellen | can_create_tickets |
POST /tickets |
| Tickets lesen | can_read_tickets |
GET /tickets/:number |
| Tickets aktualisieren | can_update_tickets |
PATCH /tickets/:number |
| Tickets suchen | can_search_tickets |
GET /tickets/search |
| Tickets löschen | can_delete_tickets |
DELETE /tickets/:number |
| Statistiken lesen | can_read_stats |
GET /tickets-stats, GET /tickets-statuses |
| Subtickets verwalten | can_manage_subtickets |
Alle Subticket-Endpunkte |
Bildschirmfoto:
Die Permissions-Seite zeigt:
API Endpoint Permissions:
☑ Create Tickets ☑ Update Tickets ☑ Read Tickets
POST /tickets PATCH /tickets/:id GET /tickets/:number
☑ Search Tickets ☑ Delete Tickets ☑ Read Stats
GET /tickets/search DELETE /tickets/:number GET /tickets-stats
☑ Manage Subtickets
Subticket Operations
Das Plugin unterstützt Legacy-API-Keys (ohne neue Berechtigungen):
can_create_tickets fehlt → Fallback zu canCreateTickets() (osTicket Standard)can_read_tickets fehlt → Fallback zu canCreateTickets() (READ = CREATE erlaubt)can_update_tickets fehlt → Fallback zu canCreateTickets()Empfehlung: Migriere zu neuen Berechtigungen für feinkörnige Kontrolle.
Principle of Least Privilege:
can_read_statscan_create_ticketsRotation & Revocation:
Audit Logging:
Das Plugin stellt 11 REST-Endpunkte bereit:
| Endpunkt | Methode | Beschreibung |
|---|---|---|
/api/tickets.json |
POST | Erweiterte Ticket-Erstellung (Markdown, Department, Subticket) |
/api/tickets-get.php/{number}.json |
GET | Ticket-Details abrufen |
/api/tickets-update.php/{number}.json |
PATCH | Ticket aktualisieren (Status, Department, SLA, dueDate, etc.) |
/api/tickets-search.php |
GET | Tickets durchsuchen |
/api/tickets-delete.php/{number}.json |
DELETE | Ticket permanent löschen |
/api/tickets-stats.php |
GET | Ticket-Statistiken (global, Department, Staff) |
/api/tickets-statuses.php |
GET | Verfügbare Ticket-Status auflisten |
/api/tickets-subtickets-parent.php/{id}.json |
GET | Eltern-Ticket eines Subtickets abrufen |
/api/tickets-subtickets-list.php/{id}.json |
GET | Alle Kind-Tickets eines Eltern-Tickets abrufen |
/api/tickets-subtickets-create.php |
POST | Eltern-Kind-Beziehung erstellen |
/api/tickets-subtickets-unlink.php |
DELETE | Eltern-Kind-Beziehung entfernen |
Alle GET-Endpunkte unterstützen sowohl JSON als auch XML:
.json für JSON-Response.xml für XML-ResponseDer PATCH /tickets-update.php/{number}.json Endpunkt unterstützt das Setzen, Ändern und Löschen von Fälligkeitsdaten.
| Parameter | Typ | Beschreibung | Beispiel |
|---|---|---|---|
dueDate |
string/null | Fälligkeitsdatum im ISO 8601 Format. null zum Löschen. |
"2026-01-31" oder "2026-01-31T17:30:00" |
null um das Fälligkeitsdatum zu entfernenisOverdue-Flag automatisch zurückgesetztFälligkeitsdatum setzen:
curl -X PATCH "https://osticket.local/api/tickets-update.php/123456.json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"dueDate": "2026-01-31"
}'
Fälligkeitsdatum mit Uhrzeit:
curl -X PATCH "https://osticket.local/api/tickets-update.php/123456.json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"dueDate": "2026-01-31T17:30:00"
}'
Fälligkeitsdatum löschen:
curl -X PATCH "https://osticket.local/api/tickets-update.php/123456.json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"dueDate": null
}'
Kombination mit anderen Feldern:
curl -X PATCH "https://osticket.local/api/tickets-update.php/123456.json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"statusId": "Open",
"priority": "High",
"dueDate": "2026-02-15",
"note": "Fälligkeitsdatum aktualisiert, Priorität erhöht"
}'
Für vollständige API-Dokumentation mit Request/Response-Beispielen siehe die englische Version.
Dieses Plugin wird unter der GNU General Public License v2 veröffentlicht, kompatibel mit osTicket Core.
Details siehe LICENSE.
Für Fragen oder Probleme erstelle bitte ein Issue auf GitHub:
Issue Tracker: https://github.com/markus-michalski/osticket-api-endpoints/issues
Beim Melden von Problemen bitte angeben:
php -v)Entwickelt von Markus Michalski
Beiträge willkommen!
Development-Setup:
# Repository clonen
git clone https://github.com/markus-michalski/osticket-api-endpoints.git
cd osticket-api-endpoints
# Dependencies installieren
composer install
# Tests ausführen
composer test
# Code-Style prüfen
composer cs-check
Siehe CHANGELOG.md für Versionshistorie.