{ "openapi": "3.0.3", "info": { "title": "notifications-full", "version": "0.0.1", "description": "This app provides a backend and frontend for the notification API available in Nextcloud.", "license": { "name": "agpl" } }, "components": { "securitySchemes": { "basic_auth": { "type": "http", "scheme": "basic" }, "bearer_auth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Capabilities": { "type": "object", "required": [ "notifications" ], "properties": { "notifications": { "type": "object", "required": [ "ocs-endpoints", "push", "admin-notifications" ], "properties": { "ocs-endpoints": { "type": "array", "items": { "type": "string" } }, "push": { "type": "array", "items": { "type": "string" } }, "admin-notifications": { "type": "array", "items": { "type": "string" } } } } } }, "Notification": { "type": "object", "required": [ "notification_id", "app", "user", "datetime", "object_type", "object_id", "subject", "message", "link", "actions" ], "properties": { "notification_id": { "type": "integer", "format": "int64" }, "app": { "type": "string" }, "user": { "type": "string" }, "datetime": { "type": "string" }, "object_type": { "type": "string" }, "object_id": { "type": "string" }, "subject": { "type": "string" }, "message": { "type": "string" }, "link": { "type": "string" }, "actions": { "type": "array", "items": { "$ref": "#/components/schemas/NotificationAction" } }, "subjectRich": { "type": "string" }, "subjectRichParameters": { "type": "object", "additionalProperties": { "type": "object" } }, "messageRich": { "type": "string" }, "messageRichParameters": { "type": "object", "additionalProperties": { "type": "object" } }, "icon": { "type": "string" }, "shouldNotify": { "type": "boolean" } } }, "NotificationAction": { "type": "object", "required": [ "label", "link", "type", "primary" ], "properties": { "label": { "type": "string" }, "link": { "type": "string" }, "type": { "type": "string" }, "primary": { "type": "boolean" } } }, "OCSMeta": { "type": "object", "required": [ "status", "statuscode" ], "properties": { "status": { "type": "string" }, "statuscode": { "type": "integer" }, "message": { "type": "string" }, "totalitems": { "type": "string" }, "itemsperpage": { "type": "string" } } }, "PushDevice": { "type": "object", "required": [ "publicKey", "deviceIdentifier", "signature" ], "properties": { "publicKey": { "type": "string" }, "deviceIdentifier": { "type": "string" }, "signature": { "type": "string" } } } } }, "paths": { "/ocs/v2.php/apps/notifications/api/{apiVersion}/notifications": { "get": { "operationId": "endpoint-list-notifications", "summary": "Get all notifications", "tags": [ "endpoint" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "description": "Version of the API to use", "required": true, "schema": { "type": "string", "enum": [ "v1", "v2" ], "default": "v2" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Notifications returned", "headers": { "X-Nextcloud-User-Status": { "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/Notification" } } } } } } } } }, "204": { "description": "No app uses notifications", "headers": { "X-Nextcloud-User-Status": { "schema": { "type": "string" } } } } } }, "delete": { "operationId": "endpoint-delete-all-notifications", "summary": "Delete all notifications", "tags": [ "endpoint" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v1", "v2" ], "default": "v2" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "All notifications deleted successfully", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } }, "403": { "description": "Deleting notification for impersonated user is not allowed", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/notifications/api/{apiVersion}/notifications/{id}": { "get": { "operationId": "endpoint-get-notification", "summary": "Get a notification", "tags": [ "endpoint" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "description": "Version of the API to use", "required": true, "schema": { "type": "string", "enum": [ "v1", "v2" ], "default": "v2" } }, { "name": "id", "in": "path", "description": "ID of the notification", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Notification returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Notification" } } } } } } } }, "404": { "description": "Notification not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } }, "delete": { "operationId": "endpoint-delete-notification", "summary": "Delete a notification", "tags": [ "endpoint" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v1", "v2" ], "default": "v2" } }, { "name": "id", "in": "path", "description": "ID of the notification", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Notification deleted successfully", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } }, "403": { "description": "Deleting notification for impersonated user is not allowed", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "404": { "description": "Notification not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/notifications/api/{apiVersion}/notifications/exists": { "post": { "operationId": "endpoint-confirm-ids-for-user", "summary": "Check if notification IDs exist", "tags": [ "endpoint" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "ids[]", "in": "query", "description": "IDs of the notifications to check", "required": true, "schema": { "type": "array", "items": { "type": "integer", "format": "int64" } } }, { "name": "apiVersion", "in": "path", "description": "Version of the API to use", "required": true, "schema": { "type": "string", "enum": [ "v1", "v2" ], "default": "v2" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Existing notification IDs returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "type": "integer", "format": "int64" } } } } } } } } }, "400": { "description": "Too many notification IDs requested", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "type": "integer", "format": "int64" } } } } } } } } } } } }, "/ocs/v2.php/apps/notifications/api/{apiVersion}/settings": { "post": { "operationId": "settings-personal", "summary": "Update personal notification settings", "tags": [ "settings" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "batchSetting", "in": "query", "description": "How often E-mails about missed notifications should be sent (hourly: 1; every three hours: 2; daily: 3; weekly: 4)", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "soundNotification", "in": "query", "description": "Enable sound for notifications ('yes' or 'no')", "required": true, "schema": { "type": "string" } }, { "name": "soundTalk", "in": "query", "description": "Enable sound for Talk notifications ('yes' or 'no')", "required": true, "schema": { "type": "string" } }, { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v2" ], "default": "v2" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Personal settings updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/notifications/api/{apiVersion}/admin_notifications/{userId}": { "post": { "operationId": "api-generate-notification", "summary": "Generate a notification for a user", "description": "This endpoint requires admin access", "tags": [ "api" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "shortMessage", "in": "query", "description": "Subject of the notification", "required": true, "schema": { "type": "string" } }, { "name": "longMessage", "in": "query", "description": "Message of the notification", "schema": { "type": "string", "default": "" } }, { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v1", "v2" ], "default": "v2" } }, { "name": "userId", "in": "path", "description": "ID of the user", "required": true, "schema": { "type": "string" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Notification generated successfully", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } }, "400": { "description": "Generating notification is not possible", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "404": { "description": "User not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/notifications/api/{apiVersion}/settings/admin": { "post": { "operationId": "settings-admin", "summary": "Update default notification settings for new users", "description": "This endpoint requires admin access", "tags": [ "settings" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "batchSetting", "in": "query", "description": "How often E-mails about missed notifications should be sent (hourly: 1; every three hours: 2; daily: 3; weekly: 4)", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "soundNotification", "in": "query", "description": "Enable sound for notifications ('yes' or 'no')", "required": true, "schema": { "type": "string" } }, { "name": "soundTalk", "in": "query", "description": "Enable sound for Talk notifications ('yes' or 'no')", "required": true, "schema": { "type": "string" } }, { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v2" ], "default": "v2" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Admin settings updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/notifications/api/{apiVersion}/push": { "post": { "operationId": "push-register-device", "summary": "Register device for push notifications", "tags": [ "push" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "pushTokenHash", "in": "query", "description": "Hash of the push token", "required": true, "schema": { "type": "string" } }, { "name": "devicePublicKey", "in": "query", "description": "Public key of the device", "required": true, "schema": { "type": "string" } }, { "name": "proxyServer", "in": "query", "description": "Proxy server to be used", "required": true, "schema": { "type": "string" } }, { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v2" ], "default": "v2" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Device was already registered", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/PushDevice" } } } } } } } }, "201": { "description": "Device registered successfully", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/PushDevice" } } } } } } } }, "400": { "description": "Registering device is not possible", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string" } } } } } } } } } }, "401": { "description": "Missing permissions to register device", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "push-remove-device", "summary": "Remove a device from push notifications", "tags": [ "push" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v2" ], "default": "v2" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "No device registered", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } }, "202": { "description": "Device removed successfully", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } }, "401": { "description": "Missing permissions to remove device", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } }, "400": { "description": "Removing device is not possible", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string" } } } } } } } } } } } } } }, "tags": [] }