{ "swagger": "2.0", "info": { "description": "API for SCN", "title": "SimpleCloudNotifier API", "contact": {}, "version": "2.0" }, "host": "scn.blackforestbytes.com", "basePath": "/", "paths": { "/": { "post": { "summary": "Send a new message", "parameters": [ { "type": "string", "name": "message_content", "in": "query" }, { "type": "string", "name": "message_title", "in": "query" }, { "type": "integer", "name": "priority", "in": "query" }, { "type": "integer", "name": "sendTimestamp", "in": "query" }, { "type": "string", "name": "userMessageID", "in": "query" }, { "type": "string", "name": "user_id", "in": "query" }, { "type": "string", "name": "user_key", "in": "query" }, { "description": " ", "name": "post_body", "in": "body", "schema": { "$ref": "#/definitions/handler.SendMessage.body" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ClientJSON" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api-v2/users/": { "post": { "summary": "Create a new user", "operationId": "api-user-create", "parameters": [ { "description": " ", "name": "post_body", "in": "body", "schema": { "$ref": "#/definitions/handler.CreateUser.body" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.UserJSON" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api-v2/users/{uid}": { "get": { "summary": "Get a user", "operationId": "api-user-get", "parameters": [ { "type": "integer", "description": "UserID", "name": "uid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.UserJSON" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } }, "patch": { "description": "The body-values are optional, only send the ones you want to update", "summary": "(Partially) update a user", "operationId": "api-user-update", "parameters": [ { "description": " ", "name": "post_body", "in": "body", "schema": { "$ref": "#/definitions/handler.UpdateUser.body" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.UserJSON" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api-v2/users/{uid}/clients": { "get": { "summary": "List all clients", "operationId": "api-clients-list", "parameters": [ { "type": "integer", "description": "UserID", "name": "uid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.ListClients.result" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } }, "post": { "summary": "Delete a client", "operationId": "api-clients-delete", "parameters": [ { "type": "integer", "description": "UserID", "name": "uid", "in": "path", "required": true }, { "type": "integer", "description": "ClientID", "name": "cid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ClientJSON" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api-v2/users/{uid}/clients/{cid}": { "get": { "summary": "Get a single clients", "operationId": "api-clients-get", "parameters": [ { "type": "integer", "description": "UserID", "name": "uid", "in": "path", "required": true }, { "type": "integer", "description": "ClientID", "name": "cid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ClientJSON" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api/ack.php": { "get": { "summary": "Acknowledge that a message was received", "operationId": "compat-ack", "parameters": [ { "type": "string", "description": "the user_id", "name": "user_id", "in": "query", "required": true }, { "type": "string", "description": "the user_key", "name": "user_key", "in": "query", "required": true }, { "type": "string", "description": "the message id", "name": "scn_msg_id", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.Ack.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api/expand.php": { "get": { "summary": "Get a whole (potentially truncated) message", "operationId": "compat-expand", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.Expand.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api/info.php": { "get": { "summary": "Get information about the current user", "operationId": "compat-info", "parameters": [ { "type": "string", "description": "the user_id", "name": "user_id", "in": "query", "required": true }, { "type": "string", "description": "the user_key", "name": "user_key", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.Info.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api/register.php": { "get": { "summary": "Register a new account", "operationId": "compat-register", "parameters": [ { "type": "string", "description": "the (android) fcm token", "name": "fcm_token", "in": "query", "required": true }, { "enum": [ "true", "false" ], "type": "string", "description": "if the user is a paid account", "name": "pro", "in": "query", "required": true }, { "type": "string", "description": "the (android) IAP token", "name": "pro_token", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.Register.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api/requery.php": { "get": { "summary": "Return all not-acknowledged messages", "operationId": "compat-requery", "parameters": [ { "type": "string", "description": "the user_id", "name": "user_id", "in": "query", "required": true }, { "type": "string", "description": "the user_key", "name": "user_key", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.Requery.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api/update.php": { "get": { "summary": "Set the fcm-token (android)", "operationId": "compat-update", "parameters": [ { "type": "string", "description": "the user_id", "name": "user_id", "in": "query", "required": true }, { "type": "string", "description": "the user_key", "name": "user_key", "in": "query", "required": true }, { "type": "string", "description": "the (android) fcm token", "name": "fcm_token", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.Update.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/api/upgrade.php": { "get": { "summary": "Upgrade a free account to a paid account", "operationId": "compat-upgrade", "parameters": [ { "type": "string", "description": "the user_id", "name": "user_id", "in": "query", "required": true }, { "type": "string", "description": "the user_key", "name": "user_key", "in": "query", "required": true }, { "enum": [ "true", "false" ], "type": "string", "description": "if the user is a paid account", "name": "pro", "in": "query", "required": true }, { "type": "string", "description": "the (android) IAP token", "name": "pro_token", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.Upgrade.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/db-test": { "get": { "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.DatabaseTest.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/health": { "get": { "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.Health.response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/ping": { "get": { "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.pingResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } }, "put": { "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.pingResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } }, "post": { "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.pingResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } }, "delete": { "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.pingResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } }, "patch": { "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/handler.pingResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } }, "/send": { "post": { "summary": "Send a new message", "parameters": [ { "type": "string", "name": "message_content", "in": "query" }, { "type": "string", "name": "message_title", "in": "query" }, { "type": "integer", "name": "priority", "in": "query" }, { "type": "integer", "name": "sendTimestamp", "in": "query" }, { "type": "string", "name": "userMessageID", "in": "query" }, { "type": "string", "name": "user_id", "in": "query" }, { "type": "string", "name": "user_key", "in": "query" }, { "description": " ", "name": "post_body", "in": "body", "schema": { "$ref": "#/definitions/handler.SendMessage.body" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ClientJSON" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ginresp.apiError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ginresp.apiError" } } } } } }, "definitions": { "ginresp.apiError": { "type": "object", "properties": { "errhighlight": { "type": "integer" }, "error": { "type": "integer" }, "errorObject": {}, "message": { "type": "string" }, "success": { "type": "boolean" } } }, "handler.Ack.response": { "type": "object", "properties": { "message": { "type": "string" }, "new_ack": { "type": "integer" }, "prev_ack": { "type": "integer" }, "success": { "type": "string" } } }, "handler.AddClient.body": { "type": "object", "properties": { "agent_model": { "type": "string" }, "agent_version": { "type": "string" }, "client_type": { "type": "string" }, "fcm_token": { "type": "string" } } }, "handler.CreateUser.body": { "type": "object", "properties": { "agent_model": { "type": "string" }, "agent_version": { "type": "string" }, "client_type": { "type": "string" }, "fcm_token": { "type": "string" }, "pro_token": { "type": "string" }, "username": { "type": "string" } } }, "handler.DatabaseTest.response": { "type": "object", "properties": { "libVersion": { "type": "string" }, "libVersionNumber": { "type": "integer" }, "sourceID": { "type": "string" }, "success": { "type": "boolean" } } }, "handler.Expand.response": { "type": "object", "properties": { "data": { "$ref": "#/definitions/models.ShortCompatMessage" }, "message": { "type": "string" }, "success": { "type": "string" } } }, "handler.Health.response": { "type": "object", "properties": { "status": { "type": "string" } } }, "handler.Info.response": { "type": "object", "properties": { "fcm_token_set": { "type": "boolean" }, "is_pro": { "type": "string" }, "message": { "type": "string" }, "quota": { "type": "string" }, "quota_max": { "type": "string" }, "success": { "type": "string" }, "unack_count": { "type": "integer" }, "user_id": { "type": "string" }, "user_key": { "type": "string" } } }, "handler.ListClients.result": { "type": "object", "properties": { "clients": { "type": "array", "items": { "$ref": "#/definitions/models.ClientJSON" } } } }, "handler.Register.response": { "type": "object", "properties": { "is_pro": { "type": "integer" }, "message": { "type": "string" }, "quota": { "type": "integer" }, "quota_max": { "type": "integer" }, "success": { "type": "boolean" }, "user_id": { "type": "string" }, "user_key": { "type": "string" } } }, "handler.Requery.response": { "type": "object", "properties": { "count": { "type": "integer" }, "data": { "type": "array", "items": { "$ref": "#/definitions/models.CompatMessage" } }, "message": { "type": "string" }, "success": { "type": "string" } } }, "handler.SendMessage.body": { "type": "object", "properties": { "message_content": { "type": "string" }, "message_title": { "type": "string" }, "priority": { "type": "integer" }, "sendTimestamp": { "type": "integer" }, "userMessageID": { "type": "string" }, "user_id": { "type": "string" }, "user_key": { "type": "string" } } }, "handler.Update.response": { "type": "object", "properties": { "is_pro": { "type": "string" }, "message": { "type": "string" }, "quota": { "type": "string" }, "quota_max": { "type": "string" }, "success": { "type": "string" }, "user_id": { "type": "string" }, "user_key": { "type": "string" } } }, "handler.UpdateUser.body": { "type": "object", "properties": { "pro_token": { "type": "string" }, "username": { "type": "string" } } }, "handler.Upgrade.response": { "type": "object", "properties": { "data": { "$ref": "#/definitions/models.ShortCompatMessage" }, "message": { "type": "string" }, "success": { "type": "string" } } }, "handler.pingResponse": { "type": "object", "properties": { "info": { "$ref": "#/definitions/handler.pingResponseInfo" }, "message": { "type": "string" } } }, "handler.pingResponseInfo": { "type": "object", "properties": { "addr": { "type": "string" }, "headers": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } }, "method": { "type": "string" }, "request": { "type": "string" }, "uri": { "type": "string" } } }, "models.ClientJSON": { "type": "object", "properties": { "agent_model": { "type": "string" }, "agent_version": { "type": "string" }, "client_id": { "type": "integer" }, "fcm_token": { "type": "string" }, "timestamp_created": { "type": "string" }, "type": { "type": "string" }, "user_id": { "type": "integer" } } }, "models.CompatMessage": { "type": "object", "properties": { "body": { "type": "string" }, "priority": { "type": "integer" }, "scn_msg_id": { "type": "string" }, "timestamp": { "type": "integer" }, "title": { "type": "string" }, "usr_msg_id": { "type": "string" } } }, "models.ShortCompatMessage": { "type": "object", "properties": { "body": { "type": "string" }, "priority": { "type": "integer" }, "scn_msg_id": { "type": "string" }, "timestamp": { "type": "integer" }, "title": { "type": "string" }, "trimmed": { "type": "boolean" }, "usr_msg_id": { "type": "string" } } }, "models.UserJSON": { "type": "object", "properties": { "admin_key": { "type": "string" }, "is_pro": { "type": "boolean" }, "messages_sent": { "type": "integer" }, "quota_day": { "type": "string" }, "quota_today": { "type": "integer" }, "read_key": { "type": "string" }, "send_key": { "type": "string" }, "timestamp_created": { "type": "string" }, "timestamp_last_read": { "type": "string" }, "timestamp_last_sent": { "type": "string" }, "user_id": { "type": "integer" }, "username": { "type": "string" } } } } }