Wir wollten eigentlich nur eines: Teams-Genehmigungen programmatisch erstellen und verwalten. Aus einer eigenen App heraus, ohne Power Automate, ohne Umwege. Die Microsoft Graph Approvals API klang nach genau dem richtigen Werkzeug.
Spoiler: Die API ist Beta — und das merkt man. Deutlich.
Was folgt, ist ein ehrlicher Erfahrungsbericht. Damit ihr nicht die gleichen Stunden verbrennt wie wir.
Was die Approvals API verspricht
Die Approvals API unter /beta/solutions/approval/approvalItems bietet auf dem Papier alles, was man braucht:
- Genehmigungen erstellen — programmatisch, mit Titel, Genehmigern und Antwortoptionen
- Genehmigungen lesen — Status abfragen, Ergebnisse auswerten
- Echtzeit-Updates per Webhook — Subscriptions auf Änderungen, damit man nicht pollen muss
Dazu zwei Permission-Modelle:
| Permission | Typ | Beschreibung laut Microsoft |
|---|---|---|
ApprovalSolution.ReadWrite |
Delegated | Lesen und Schreiben im User-Kontext |
ApprovalSolution.ReadWrite.All |
Application | “Read all approvals and manage approval subscriptions” |
Klingt sauber. Ist es aber nicht.
Was tatsächlich funktioniert
Genehmigungen erstellen (Delegated)
Das Erstellen von Approvals funktioniert — allerdings nur mit Delegated Permissions und mit einer Besonderheit: Die API antwortet nicht mit dem fertigen Objekt, sondern mit 202 Accepted und einer Operation-URL zum Pollen.
Request:
|
|
Response — nicht das Objekt, sondern ein Redirect:
|
|
Dann heißt es: Pollen, bis status auf succeeded steht. Die echte Approval-ID steckt im Feld resourceLocation der Operation-Response.
|
|
Ungewöhnlich, aber funktional. Haken dran.
Genehmigungen lesen (Delegated)
Mit Delegated Token klappt auch das Lesen:
|
|
Funktioniert. Keine Überraschungen.
Was nicht funktioniert
Und hier wird es interessant.
Problem 1: Approvals lesen mit App-Permissions → 401
Die Permission ApprovalSolution.ReadWrite.All beschreibt sich selbst als:
“Read all approvals and manage approval subscriptions”
Man erwartet also: App-Token holen, Approvals lesen, fertig. Wir hatten die Permission im Azure AD konfiguriert, Admin Consent erteilt — alles nach Lehrbuch.
Request:
|
|
Response:
|
|
Das war verwirrend. Token war gültig, Permission war granted. Was war los?
Die Auflösung findet sich nicht in der Permission-Beschreibung, sondern in der API-Referenz der einzelnen Endpoints. Dort steht bei List und Get approvalItems:
Application permissions: Not supported.
Die Permission-Beschreibung sagt “Read all approvals”. Die Endpoint-Dokumentation sagt “Not supported”. Das widerspricht sich direkt.
Von Microsoft bestätigt: Der Support hat dieses Verhalten reproduziert und als Dokumentations-Inkonsistenz bestätigt. Die Endpoint-Dokumentation ist maßgeblich — App-only Lesen wird aktuell nicht unterstützt. Eine Korrektur der Permission-Beschreibung wurde an das Engineering-Team weitergeleitet.
Problem 2: Webhook-Notifications werden nie zugestellt
Das war der frustrierendste Teil. Subscriptions auf Approval-Änderungen erstellen? Klappt einwandfrei:
Request:
|
|
Response — alles sieht gut aus:
|
|
Der Validation-Handshake funktioniert: Microsoft sendet einen validationToken, unser Endpoint antwortet korrekt mit 200 OK und dem Token im Body. Subscription wird erstellt und ist auch per GET abrufbar.
Und dann: Stille.
Wir erstellen Approvals in Teams. Wir genehmigen sie. Wir lehnen ab. Keine einzige Notification kommt an.
Unser Endpoint war erreichbar — das hat der Validation-Request ja bewiesen. Wir haben Logs, wir haben getestet. Nichts.
Eine Suche in der Microsoft Q&A Community zeigt: Wir sind nicht die einzigen. Andere Entwickler berichten exakt das gleiche Verhalten — erfolgreiche Validation, aber keine Change Notifications.
Von Microsoft bestätigt: Der Support kann das Problem reproduzieren. Wörtlich: “The subscription creation and validation handshake succeed, but no events arrive when approvals are created/updated in Teams.” Es handelt sich um eine aktuelle Produktlimitation des Beta-Endpoints.
Problem 3: v1.0 Endpoint existiert nicht
Die Change Notifications Übersicht listet solutions/approval/approvalItems als unterstützte Resource — ohne Asterisk, was v1.0-Support impliziert.
Request:
|
|
Response:
|
|
Approvals existieren ausschließlich unter /beta. Die Dokumentation wurde inzwischen zur Korrektur weitergeleitet.
Was das für die Praxis bedeutet
Fassen wir zusammen. Stand März 2026:
| Feature | Delegated | Application |
|---|---|---|
| Approval erstellen | ✅ (async, 202) | ❌ nicht unterstützt |
| Approval lesen | ✅ | ❌ 401 trotz Permission |
| Subscription erstellen | — | ✅ (nur beta) |
| Notifications erhalten | — | ❌ werden nicht geliefert |
| v1.0 Endpoint | ❌ | ❌ |
Das Ergebnis: Ohne funktionierende Webhooks und ohne App-only Lesezugriff ist die Approvals API für Automatisierungs-Szenarien aktuell kaum nutzbar.
Was bleibt als Workaround?
- Polling mit Delegated Token — Funktioniert, aber erfordert gespeicherte User-Tokens mit Refresh-Token-Handling und skaliert schlecht
- Power Automate — Microsofts eigener Weg, der funktioniert, aber den Sinn einer eigenen API-Integration konterkariert
- Warten — Die API ist Beta, und der Support hat eine Weiterleitung an das Engineering-Team bestätigt
Fazit
Die Microsoft Graph Approvals API hat Potenzial. Die Idee, Genehmigungsprozesse per API zu steuern, ist richtig und wichtig. Aber Stand heute fehlen grundlegende Bausteine:
- Drei Probleme — alle von Microsoft Support bestätigt
- Dokumentation widerspricht sich selbst
- Der zentrale Use Case (Echtzeit-Updates per Webhook) funktioniert schlicht nicht
Unsere Empfehlung: Behaltet die API im Auge, aber plant aktuell nicht damit für Produktions-Szenarien. Beobachtet das Graph Changelog und den Q&A Thread für Updates.
Wir bleiben dran und berichten, sobald sich etwas tut.
Habt ihr ähnliche Erfahrungen mit der Approvals API gemacht? Oder nutzt ihr einen anderen Weg, um Genehmigungen in Teams zu automatisieren? Schreibt es in die Kommentare oder meldet euch bei uns auf LinkedIn.