openapi: 3.1.0 info: {title: HAN Message Safety, version: 1.0.0} paths: /health/live: get: {responses: {"200": {description: Live}}} /health/ready: get: {responses: {"200": {description: Ready}, "503": {description: Redis unavailable}}} /internal/safety/v1/messages/check: post: security: [{ServiceToken: []}] parameters: [{$ref: "#/components/parameters/RequestId"}] requestBody: required: true content: application/json: schema: {$ref: "#/components/schemas/CheckRequest"} responses: "200": {description: Allow} "203": {description: Pending} "403": {description: Deny} "409": {description: Conflicting message id} "503": {description: Redis unavailable} /internal/safety/v1/messages/tasks/{task_id}: get: security: [{ServiceToken: []}] parameters: - {name: task_id, in: path, required: true, schema: {type: string, format: uuid}} - {$ref: "#/components/parameters/RequestId"} responses: "200": {description: Allow} "203": {description: Pending} "400": {description: Validation error or terminal stub rejection} "404": {description: Task not found} components: securitySchemes: ServiceToken: {type: apiKey, in: header, name: X-Service-Token} parameters: RequestId: {name: X-Request-ID, in: header, required: false, schema: {type: string}} schemas: Attachment: type: object additionalProperties: false required: [attachment_id, quarantine_object_key, mime_type, size_bytes, checksum] properties: attachment_id: {type: string, format: uuid} quarantine_object_key: {type: string, maxLength: 1024} mime_type: {type: string, maxLength: 255} size_bytes: {type: integer, minimum: 0} checksum: {type: string, pattern: "^sha256:[0-9a-fA-F]{64}$"} CheckRequest: type: object additionalProperties: false required: [message_id, content_kind] properties: message_id: {type: string, format: uuid} content_kind: {type: string, enum: [text, file]} text: {type: string, maxLength: 10000, default: ""} attachment: {anyOf: [{$ref: "#/components/schemas/Attachment"}, {type: "null"}]}