API: Aufträge
Aufträge über die API abfragen, anlegen und ihren Status ändern, mit Filtern, Feldern, erlaubten Statuswechseln und Beispielen.
Stand:
| Methode | Pfad | Berechtigung | Inhalt |
|---|---|---|---|
| GET | /orders |
read:orders |
Auftragsliste, blätterbar |
| GET | /orders/{id} |
read:orders |
ein Auftrag mit Notizen und Berichten |
| POST | /orders |
write:orders |
Auftrag anlegen |
| POST | /orders/{id}/status |
write:orders |
Status ändern |
Aufträge abfragen#
Filter für GET /orders:
| Parameter | Bedeutung |
|---|---|
status |
ein oder mehrere Status, mit Komma getrennt, z. B. open,in_progress |
customer_id, site_id |
Aufträge eines Kunden oder Objekts |
asset_id |
Aufträge, die diese Anlage enthalten |
scheduled_from, scheduled_to |
geplanter Beginn ab (einschließlich) bzw. vor (ausschließlich) diesem Zeitpunkt |
limit, cursor, updated_since |
siehe Blättern |
Beispiel: alle offenen und laufenden Aufträge der kommenden Woche.
curl -G "https://app.revisio-app.net/api/public/v1/orders" \
--data-urlencode "status=open,in_progress" \
--data-urlencode "scheduled_from=2026-11-02T00:00:00+01:00" \
--data-urlencode "scheduled_to=2026-11-09T00:00:00+01:00" \
-H "Authorization: Bearer rvs_IhrToken"
Ein Auftrag aus GET /orders/{id}:
{
"data": {
"id": "01k7b2c4d6e8f0g2h4j6k8m0n2",
"number": "A-2026-00012",
"title": null,
"display_title": "Wartung",
"status": "open",
"priority": "normal",
"type": { "id": "01k79z8y7x6w5v4t3s2r1q0p9n", "name": "Wartung" },
"customer_id": "01k7a3m9x2c4d5e6f7g8h9j0k1",
"site_id": "01k7a3n4q8r2s6t0v4w8x2y6z0",
"fault_id": null,
"asset_ids": ["01k7a3p1b5c9d3e7f1g5h9j3k7"],
"assignees": [
{ "user_id": "01k6z1a2b3c4d5e6f7g8h9j0k1", "name": "Jonas Beispiel", "is_lead": true }
],
"scheduled_start": "2026-11-03T07:00:00+00:00",
"scheduled_end": "2026-11-03T09:00:00+00:00",
"actual_start": null,
"actual_end": null,
"completed_at": null,
"overall_result": null,
"cancel_reason": null,
"notes_technician": "Schlüssel beim Hausmeister.",
"result_notes": null,
"reports": [],
"created_at": "2026-10-16T10:04:12+00:00",
"updated_at": "2026-10-16T10:04:12+00:00"
}
}
notes_technician, result_notes und reports stehen nur in der Einzelabfrage, nicht in der Liste.
| Feld | Werte |
|---|---|
status |
draft (Entwurf), open (offen), in_progress (in Arbeit), paused (pausiert), completed (abgeschlossen), reviewed (geprüft), report_sent (Bericht versendet), billed (abgerechnet), cancelled (storniert) |
priority |
low, normal, high, critical |
overall_result |
nach Abschluss: operational (betriebsbereit), operational_with_defects (betriebsbereit mit Mängeln), not_operational (nicht betriebsbereit) |
display_title |
Titel wie in Revisio angezeigt, auch wenn title leer ist |
assignees |
zugewiesene Techniker, is_lead kennzeichnet die Leitung |
actual_start, actual_end |
tatsächlicher Arbeitsbeginn und -ende laut Techniker-App |
reports |
Berichte mit id, number (inkl. Version), version, status |
Auftrag anlegen#
POST /orders legt einen Auftrag im Status open an. Kunde und Objekt ergeben sich aus den Anlagen.
| Feld | Pflicht | Regel |
|---|---|---|
order_type_id |
ja | aktiver Auftragstyp aus GET /order-types |
asset_ids |
ja | 1 bis 50 Anlagen, alle vom selben Objekt, keine doppelt |
title |
nein | bis 255 Zeichen; ohne Titel zeigt Revisio den Namen des Auftragstyps |
priority |
nein | low, normal (Standard), high, critical |
scheduled_start |
nein | geplanter Beginn; Pflicht, wenn scheduled_end gesetzt ist |
scheduled_end |
nein | geplantes Ende, nach scheduled_start |
notes_technician |
nein | Hinweis für die Techniker, bis 10.000 Zeichen |
fault_id |
nein | Störung desselben Objekts, die mit diesem Einsatz behoben wird |
curl -X POST "https://app.revisio-app.net/api/public/v1/orders" \
-H "Authorization: Bearer rvs_IhrToken" \
-H "Content-Type: application/json" \
-d '{
"order_type_id": "01k79z8y7x6w5v4t3s2r1q0p9n",
"asset_ids": ["01k7a3p1b5c9d3e7f1g5h9j3k7"],
"priority": "high",
"scheduled_start": "2026-11-03T08:00:00+01:00",
"scheduled_end": "2026-11-03T10:00:00+01:00",
"notes_technician": "Zugang über Hof, Schlüssel beim Hausmeister."
}'
Die Antwort ist 201 Created mit dem Auftrag in data und der Adresse im Header Location.
- Techniker lassen sich über die API nicht zuweisen. Die Disposition plant den Auftrag in Revisio ein; danach erscheint er in der Techniker-App.
- Mit
fault_idwird die Störung dem Auftrag zugeordnet. Ist sie noch offen, wechselt sie auf „eingeplant“. - Der neue Auftrag löst den Webhook
order.createdaus.
Typische Fehler (422 validation_failed):
Feld in details |
Meldung |
|---|---|
order_type_id |
Bitte einen aktiven Auftragstyp wählen. |
asset_ids |
Mindestens eine Anlage wurde nicht gefunden. |
asset_ids |
Alle Anlagen eines Auftrags müssen zum selben Objekt gehören. |
fault_id |
Die Störung gehört nicht zum gewählten Objekt. |
scheduled_end |
Ende vor dem Beginn |
Status ändern#
POST /orders/{id}/status mit status und optional reason (bis 1.000 Zeichen).
curl -X POST "https://app.revisio-app.net/api/public/v1/orders/01k7b2c4d6e8f0g2h4j6k8m0n2/status" \
-H "Authorization: Bearer rvs_IhrToken" \
-H "Content-Type: application/json" \
-d '{ "status": "cancelled", "reason": "Kunde hat den Termin abgesagt." }'
Über die API sind nur diese Wechsel möglich:
| von | nach |
|---|---|
draft |
open, cancelled |
open |
in_progress, cancelled |
in_progress |
paused |
paused |
in_progress |
cancelledbraucht einenreason.in_progresssetzt voraus, dass mindestens ein Techniker zugewiesen ist.- Ist der Auftrag bereits im gewünschten Status, antwortet die API mit
200und ändert nichts. Wiederholte Anfragen sind damit unschädlich. - Abschluss, Prüfung, Berichtsversand und Abrechnung laufen nur in Revisio, weil sie Prüfprotokoll und Unterschrift voraussetzen.
Ein nicht erlaubter Wechsel ergibt 422 invalid_transition mit dem aktuellen Status und den erlaubten Zielen:
{
"error": {
"code": "invalid_transition",
"message": "Statuswechsel von „completed“ nach „cancelled“ ist über die API nicht erlaubt.",
"details": { "status": "completed", "allowed": [] }
}
}
Jeder Statuswechsel steht im Statusverlauf des Auftrags und im Protokoll mit dem
Namen des API-Zugangs und löst den Webhook order.status_changed aus.