{"openapi":"3.1.0","info":{"title":"DMTG Tech School Intranet API","version":"1.0.0","description":"Tenant-isolated integration API. Token abilities never replace live application authorization."},"servers":[{"url":"https:\/\/api.dmtgtech.com"}],"security":[{"bearerAuth":[]}],"paths":{"\/v1\/health":{"get":{"summary":"Service health","security":[],"responses":{"200":{"description":"API is available","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}}}}},"\/v1\/me":{"get":{"summary":"Current API identity","x-required-ability":"identity:read","responses":{"200":{"description":"Authenticated identity","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"401":{"$ref":"#\/components\/responses\/Unauthenticated"}}}},"\/v1\/permissions\/check":{"post":{"summary":"Check effective platform permissions","x-required-ability":"permissions:read","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PermissionCheck"}}}},"responses":{"200":{"description":"Permission result map","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"401":{"$ref":"#\/components\/responses\/Unauthenticated"},"403":{"$ref":"#\/components\/responses\/Forbidden"}}}},"\/v1\/tenants\/{tenant}\/permissions\/check":{"post":{"summary":"Check effective tenant permissions","x-required-ability":"permissions:read","parameters":[{"$ref":"#\/components\/parameters\/Tenant"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PermissionCheck"}}}},"responses":{"200":{"description":"Permission result map","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/v1\/tenants\/{tenant}\/announcements":{"get":{"summary":"List published announcements","x-required-ability":"content:read","parameters":[{"$ref":"#\/components\/parameters\/Tenant"},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"Cursor-paginated announcement collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Envelope"}}}},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Sanctum"}},"parameters":{"Tenant":{"name":"tenant","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}},"schemas":{"PermissionCheck":{"type":"object","required":["permissions"],"properties":{"permissions":{"type":"array","minItems":1,"maxItems":50,"uniqueItems":true,"items":{"type":"string","maxLength":160}}}},"Envelope":{"type":"object","required":["data","meta"],"properties":{"data":[],"meta":{"type":"object","properties":{"request_id":{"type":["string","null"],"format":"uuid"}}}}},"Error":{"type":"object","properties":{"message":{"type":"string"}}}},"responses":{"Unauthenticated":{"description":"Missing or invalid bearer token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"Forbidden":{"description":"Token or live identity permission does not allow this action","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"NotFound":{"description":"Resource not found inside the authorized scope","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}}